我有两张表 Temporal_Group 和 Product_Group
如果我对组表执行以下查询:
SELECT group.id_product FROM group
WHERE id_group=2
我回来了:
id_product
----------------
5
现在,如果我查询时态表
SELECT temporal.id_product FROM temporal
返回
id_product
----------------
5
14
我想在查询中比较这两个结果并将差异返回给我...结果应该是 14 ...我试过这个:
SELECT group.id_product FROM group
WHERE group.id_product
NOT IN (
SELECT temporal.id_product
FROM temporal
WHERE group.id_product=temporal.id_product
)
AND group.id_group=2
但是我没有回复任何东西,还有另一种比较结果的方法吗? 我希望得到你的帮助。
答案 0 :(得分:1)
您的尝试会返回差异A-B
。我想你想要对称差异(A-B) UNION (B-A)
:
SELECT id_product
, 'group' AS only_in_table
FROM `group`
WHERE id_group = 2
AND id_product NOT IN
( SELECT id_product
FROM temporal
)
UNION ALL
SELECT id_product
, 'temporal' AS only_in_table
FROM temporal
WHERE id_product NOT IN
( SELECT id_product
FROM `group`
WHERE id_group = 2
)
使用group
这样的保留字来命名表或列是不好的,因为你必须以某种方式告诉SQL引擎它不是保留GROUP BY
中的“组”在MySQL中这可以通过将它们括在反引号中来完成:`group`
。
答案 1 :(得分:0)
SELECT group.id_product FROM group
WHERE id_group=2
EXCEPT
SELECT temporal.id_product FROM temporal
答案 2 :(得分:0)
您可以尝试FULL OUTER JOIN
。
SELECT
g.id_product
FROM
group g
FULL OUTER JOIN
temporal t
ON
g.id_product = t.id_product
WHERE
g.id_group = 2 AND (g.id_product IS NULL OR t.id_product IS NULL)
正如@Bill所提到的,Mysql不支持完全外部联接,因此您可以使用union
代替。
(SELECT
g.id_product
FROM
group g
LEFT JOIN
temporal t
ON
g.id_product = t.id_product
WHERE
g.id_group = 2 AND t.id_product IS NULL)
UNION
(SELECT
g.id_product
FROM
group g
RIGHT JOIN
temporal t
ON
g.id_product = t.id_product
WHERE
g.id_group = 2 AND g.id_product IS NULL)
答案 3 :(得分:0)
查找任何一个表中存在的所有项目而不是另一个;
select id_product from
(select distinct id_product from `group` where id_group = 2 union all
select distinct id_product from temporal) a
group by id_product having count(id_product)<2;
(找到两个表中的所有不同的id_product,联合在一起并显示只显示一次的所有内容)
答案 4 :(得分:0)
如何非常简单的LEFT JOIN / IS NULL。通过LEFT连接,它将在'group'表中找到组ID为2的那些产品。如果找到一个,g.id_product将有一个值...如果不是,它将为NULL ...你想要得到的那套。
select t.id_product
from
temporal t
left join `group` g
on t.id_product = g.id_product
AND g.id_group = 2
where
g.id_product IS NULL