Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 仅获取完全匹配的记录_Mysql_Join - Fatal编程技术网

Mysql 仅获取完全匹配的记录

Mysql 仅获取完全匹配的记录,mysql,join,Mysql,Join,我有两张桌子,我需要一个完整的匹配来获得所有记录。这意味着将表A连接到表B中,其中B中的所有记录都有一个特定值 我的桌子: 产品表 媒体表 我正在寻找的结果 我想要表产品中的所有记录,其中表介质中的所有引用记录都有一个feed值3 我尝试了一个完整的外部联接,但这也返回了产品1和产品2 如何修复此问题?此问题可以解决: SELECT p.id, p.name, 3 as feed FROM product p INNER JOIN media m ON p.id = m.

我有两张桌子,我需要一个完整的匹配来获得所有记录。这意味着将表A连接到表B中,其中B中的所有记录都有一个特定值

我的桌子: 产品表

媒体表

我正在寻找的结果 我想要表产品中的所有记录,其中表介质中的所有引用记录都有一个feed值3

我尝试了一个完整的外部联接,但这也返回了产品1和产品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
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。

这一个将起作用:

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。

为什么不选择产品1?media.id 3的product.id为1,提要为3@LoztInSpace,我只需要所有feed值都是3的产品,而不是一个,而是所有为什么不是产品1?media.id 3的product.id为1,提要为3@LoztInSpace,我只需要所有feed值都是3的产品,而不仅仅是一个,但是请注意,此查询还返回没有媒体行的产品。good catch@Renzo帮助我获得了希望正确的答案注意,此查询还返回了没有媒体行的产品。good catch@Renzo帮助我获得了希望正确的答案这与我的问题完全匹配,将标记为答复但是StephaneM的回答给了我另一个我将要使用的见解!这完全符合我的问题,威尔·马克就是答案。但是StephaneM的回答给了我另一个我将要使用的见解!
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
    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
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)