#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
)
Это может вам помочь.