Mysql 从两个表中选择不同栏中的foo
假设我有两张桌子:Mysql 从两个表中选择不同栏中的foo,mysql,sql,Mysql,Sql,假设我有两张桌子: Table foo =========== id | val -------- 01 | 'a' 02 | 'b' 03 | 'c' 04 | 'a' 05 | 'b' Table bar ============ id | class ------------- 01 | 'classH' 02 | 'classI' 03 | 'classJ' 04 | 'classK' 05 | 'classI' 我想返回foo和bar的所有值,其中foo存在于多个不同的bar中。因
Table foo
===========
id | val
--------
01 | 'a'
02 | 'b'
03 | 'c'
04 | 'a'
05 | 'b'
Table bar
============
id | class
-------------
01 | 'classH'
02 | 'classI'
03 | 'classJ'
04 | 'classK'
05 | 'classI'
我想返回foo和bar的所有值,其中foo存在于多个不同的bar中。因此,在本例中,我们将返回:
val | class
-------------
'a' | 'classH'
'a' | 'classK'
因为尽管“b”也存在多次,但它具有相同的条形值
我有以下查询,返回有多个条的所有foo,即使条是相同的:
select distinct foo.val, bar.class
from foo, bar
where foo.id = bar.id
and
(
select count(*) from
foo2, bar2
where foo2.id = bar2.id
and foo2.val = foo.val
) > 1
order by
va.name;
您只需使用一个已复制的子查询来显示每一行
SELECT f.val, b.class
FROM foo f
JOIN bar b ON b.id = f.id
WHERE EXISTS
( SELECT 1
FROM foo
JOIN bar ON foo.id = bar.id
WHERE foo.val = f.val
GROUP BY foo.val
HAVING COUNT(DISTINCT bar.class) > 1
);
通常存在的执行速度比中快,这就是为什么我更喜欢它而不是中。。。有关IN-VS-EXISTS的更多详细信息,请参见您只需使用一个已复制的子查询,即可使用EXISTS这样显示每一行
SELECT f.val, b.class
FROM foo f
JOIN bar b ON b.id = f.id
WHERE EXISTS
( SELECT 1
FROM foo
JOIN bar ON foo.id = bar.id
WHERE foo.val = f.val
GROUP BY foo.val
HAVING COUNT(DISTINCT bar.class) > 1
);
通常存在的执行速度比中快,这就是为什么我更喜欢它而不是中。。。有关IN-VS的更多详细信息,请参见您可以执行子查询,从
foo
获取满足条件(名称)的总体。然后连接回两个表,以获取输出所需的信息:
select f.val, b.class
from (select f.val
from foo f join
bar b
on f.id = b.id
group by f.val
having count(distinct b.class) > 1
) bf join
foo f
on bf.val = f.val join
bar b
on f.id = b.id
您可以执行子查询,从满足条件(名称)的
foo
中获取填充。然后连接回两个表,以获取输出所需的信息:
select f.val, b.class
from (select f.val
from foo f join
bar b
on f.id = b.id
group by f.val
having count(distinct b.class) > 1
) bf join
foo f
on bf.val = f.val join
bar b
on f.id = b.id
很好的查询+1从我:)简单,我需要什么。顺便说一句,我正在学习sql课程,我们的老师可以生成查询,但它们通常有3或4个子查询,并且有很多多余的内容……您是否使用了编写查询的好材料?@讽刺辞抱歉,没有任何建议。我通常在网上搜索(并且经常在这里结束)@ironicaldiction说实话,这取决于你想做什么。。。我建议你试着去理解老师的疑问,因为有时候他们需要3-4级的深度。。。如果您有任何问题,请随时发布问题,您甚至可以在其中标记我们中的一位,如果可能,我们将提供帮助:)谢谢Fuzzy和John!很好的查询+1从我:)简单,我需要什么。顺便说一句,我正在学习sql课程,我们的老师可以生成查询,但它们通常有3或4个子查询,并且有很多多余的内容……您是否使用了编写查询的好材料?@讽刺辞抱歉,没有任何建议。我通常在网上搜索(并且经常在这里结束)@ironicaldiction说实话,这取决于你想做什么。。。我建议你试着去理解老师的疑问,因为有时候他们需要3-4级的深度。。。如果您有任何问题,请随时发布问题,您甚至可以在其中标记我们中的一位,如果可能,我们将提供帮助:)谢谢Fuzzy和John!