Как извлечь запись из таблицы A, которая не имеет никакого утвержденного статуса true в таблице B

#sql #postgresql #laravel-5

#sql #postgresql #laravel-5

Вопрос:

У меня есть три таблицы A , B и C , и их структура показана ниже

             Table A                        
   ----------------------------         
   | id | Text_message_to_show|
   ----------------------------
   | 1  | first demo message  |
   ----------------------------
   | 2  | second demo message |
   ----------------------------


               Table B
   ------------------------------------
   | id | request_id  | approved_status |        
   ------------------------------------
   | 101  |   1      |       2        |
   ------------------------------------
   | 102  |   1      |       1        |
   ------------------------------------ 
   | 103  |   2      |       2        |
   ------------------------------------ 
   | 104  |   2      |       2        |
   ------------------------------------   

                Table c
   ------------------------------------
   | id | request_id  | approved_status |        
   ------------------------------------
   | 501  |   1      |       2        |
   ------------------------------------
   | 502  |   2      |       1        |
   ------------------------------------  
  
   
 

Таблица B и таблица C имеют столбец request_id внешнего ключа, который является столбцом идентификатора ссылки таблицы A. Таблица Таблица A-> Таблица B имеет отношение «один ко многим», а таблица A-> Таблица C имеет отношение «один к одному». Теперь у меня вопрос, как выполнить sql-запрос таким образом, чтобы для получения таблицы была получена запись, где no approved_status для request_id должно быть 2 в таблице B, а также в таблице C approved_status не должно быть 2

Ответ №1:

Вы можете использовать not exists следующее.

 select *
from tablea ta
where not exists (
        select 1
        from tableb tb
        where ta.id = tb.request_id
            AND tb.approved_status = 2
        )
 

Комментарии:

1. есть ли причина для левого соединения? вы упомянули, что хотите использовать записи tabele a.

2. можете ли вы объяснить, как можно написать этот sql-запрос в laravel 5 framework

3. вы продолжаете изменять свой вопрос, вместо этого вы должны публиковать новые вопросы после того, как на ваш предыдущий вопрос был дан ответ.

4. Это была опечатка.. который я исправил .. проверьте еще раз ответ

Ответ №2:

Вы можете использовать левое соединение следующим образом:

 Select a.*
  From a
  Left Join b on a.id = b.request_id and b.approved_status = 2
  Left join c on a.id = c.request_id and c.approved_status = 2
 Where coalesce(b.id,c.id) is null
 

Комментарии:

1. @harivallabhshukla . . . Я думаю , что одним из таких условий должно быть <> 2 .

Ответ №3:

 select * from tablea ta
where not exists
(
 select id from tableb tb where ta.id=tb.request_d and tb.approved_status = 2
)
 

Это может вам помочь.