2014-06-11 73 views
0

我无法修复将在2个关系表之间找到“匹配”的MYSQL查询。例如,如果传入的TABLEA ID是2,那么我想要从TABLEB返回所有ID,其中TABLEA VALUES(b和c)存在一个TABLEB ID。希望这是有道理的!在这种情况下,它不会返回任何东西。但是,当传入ID 3时,它将返回13,因为d和e存在于TABLEB中的ID 13行内。任何帮助大量赞赏!MYSQL查询匹配两个表中的多个值

TABLEA 

ID | VALUE 
1 | a 
2 | b 
2 | c 
3 | d 
3 | e 


TABLEB 

ID | VALUE 
10 | a 
12 | b 
12 | z 
13 | d 
13 | e 
13 | f 
+1

你有相同ID的多个行?是对的吗? –

+0

是的这是正确的... – sa78

回答

0

您可以试试这个查询。

UPDATE

在MySQL:

SELECT  tab_b.ID 
FROM   TABLEB tab_b 
WHERE   tab_b.VALUE IN (SELECT  TABLEA.VALUE 
           FROM  TABLEA 
           WHERE  TABLEA.ID = 3) 

GROUP BY  tab_b.ID 
HAVING  COUNT(DISTINCT tab_b.VALUE) = (SELECT  COUNT(TABLEA.VALUE) 
              FROM  TABLEA 
              WHERE  TABLEA.ID = 3) 

入住这小提琴在MySQL的: - >http://sqlfiddle.com/#!2/b1aba/10

小提琴在SQL服务器: - >http://sqlfiddle.com/#!3/b0d63/3

(你必须从2的值更改为3看到期望的结果)

希望这有助于!

+0

我想这是正确的,但我的理解是,这将返回12,当我不希望它返回任何东西......因为TABLEB ID 12也没有一个值c – sa78

+0

我想我完全误解了这个问题!我的错!!! –

+0

无论如何,我想通了!请检查更新的代码! –

0
select b.id2 
from tableA a 
left join tableB b 
on a.value = b.value2 
where a.id = 2 
and id2 is not null 

希望这回答它为您

这里是小提琴 fiddle http://sqlfiddle.com/#!3/7e4b1/5

+0

这不起作用!你的查询应该没有结果。但检查你的小提琴。结果导致12人失散。这是OP对我的回答所作的评论。在这种情况下,结果应该是没有的。因此,这个答案是错误的 –

+0

正确地阅读问题。如果您正确理解,根据给定的数据,当您尝试根据tableA中的值查找值时,如果参数为2,则不应返回任何值。相反,如果提供3作为参数,则应该返回13。 –