只获得完全匹配的记录

时间:2017-10-26 07:10:29

标签: mysql join

我有两张桌子,我需要获得完整匹配的所有记录。意思是在表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中的所有引用记录都有feed3

p.id | p.name      | m.feed
---------------------------
   2 | Product two |      3

我尝试了FULL OUTER JOIN,但也返回Product oneProduct twoSQL 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

我怎样才能解决这个问题?

2 个答案:

答案 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。