我有两张桌子,我需要获得完整匹配的所有记录。意思是在表B中连接表A,其中B中的所有记录都具有特定值。
产品表
id | name
------------------
1 | Product one
2 | Product two
3 | Product three
媒体表
id | product_id | feed
----------------------
1 | 1 | 1
2 | 1 | 1
3 | 1 | 3
4 | 2 | 3
5 | 2 | 3
6 | 3 | 1
7 | 3 | 1
8 | 3 | 1
9 | 3 | 1
我想要表product
中的所有记录,其中表media
中的所有引用记录都有feed
值3
p.id | p.name | m.feed
---------------------------
2 | Product two | 3
我尝试了FULL OUTER JOIN
,但也返回Product one
和Product two
。 SQL Fiddle example
SELECT p.id, p.name, m.feed
FROM product p
LEFT OUTER JOIN media m ON p.id = m.product_id
WHERE m.feed = 3
UNION
SELECT p.id, p.name, m.feed
FROM product p
RIGHT OUTER JOIN media m ON p.id = m.product_id
WHERE m.feed = 3
我怎样才能解决这个问题?
答案 0 :(得分:2)
SELECT p.id, p.name, 3 as feed
FROM product p
INNER JOIN media m ON p.id = m.product_id
GROUP BY p.id, p.name
HAVING max(m.feed)=3 and min(m.feed)=3
答案 1 :(得分:1)
这个会起作用:
SELECT p.id, p.name
FROM product p
WHERE NOT EXISTS (select 1 from media m
where m.product_id=p.id and m.feed <>3)
请注意,我从select中删除了m.feed,因为您知道它的值为3。