在Postgres中是否有可能确定查询1中是否至少有一个结果在查询2结果中? 例如:
SELECT * FROM items
WHERE
(SELECT id FROM users) IN (SELECT user_id FROM user_items WHERE item_id = 1)
我知道这个查询可能是一个废话,我只是在询问如何在where子句中进行检查。在我的真实查询中(更复杂),我得到了:
(Postgrex.Error)ERROR 21000(cardinality_violation):用作表达式的子查询返回的多行
如果query1(query1 IN query2)中有多个结果
修改
select user_id
from notification_token n
join notification_folder f on n.user_id = f.user_id
where ((SELECT tag_id FROM notification_folder_tag WHERE notification_folder_id = f.id) IN (SELECT tag_id FROM event_tag WHERE event_id = 1))
表:
notification_token
| user_id | notification_token |
--------------------------------------------------
| 1 | token1 |
| 2 | token2 |
| 3 | token3 |
notification_folder
| user_id | data |
--------------------------------------------------
| 1 | "useless string" |
notification_folder_tag
| notification_folder_id | tag_id |
--------------------------------------------------
| 1 | 1 |
| 1 | 2 |
| 2 | 5 |
event_tag
| event_id | tag_id |
--------------------------------------------------
| 1 | 1 |
| 2 | 2 |
| 3 | 8 |
我想要的结果是来自notification_token的user_id 1。
"其中"应该是真的,因为IN(结果1,2)的左侧至少有一个tag_id包含在IN的右侧(结果1)。 无论如何,当IN的左侧由多个条目组成时,我会收到错误。只需一个条目就可以正常使用
答案 0 :(得分:0)
您似乎想要任何订购item_1
的人也订购了物品。如果这种解释是正确的,那么这是编写查询的一种方法:
select distinct i.*
from items i join
user_items ui
on ui.item_id = i.item_id
where ui.user_id in (select ui2.user_id
from user_items ui2
where ui2.item_id = 1
);
答案 1 :(得分:0)
试试这个
SELECT * FROM items
在哪里
EXISTS(SELECT FROM FROM users)
IN
(SELECT user_id FROM user_items WHERE item_id = 1);
如果这不起作用,请转到关系数据库查询。