MySQL-连接两个表,在第二个表中搜索

MySQL-连接两个表,在第二个表中搜索,mysql,join,where-clause,Mysql,Join,Where Clause,伙计们 我有两张桌子: 表1: UID NAME 1 Name1 2 Name2 3 Name3 表2: UID PID PARAM 1 1 10 2 1 20 3 2 10 4 2 30 5 2 40 6 3 60 7 3 20 8 3 10 我需要连接两个表t1.UID=t2.PID,并且只列出第一

伙计们

我有两张桌子:

表1:

UID    NAME
1      Name1
2      Name2
3      Name3
表2:

UID    PID    PARAM
1      1     10
2      1     20
3      2     10
4      2     30
5      2     40
6      3     60
7      3     20
8      3     10
我需要连接两个表t1.UID=t2.PID,并且只列出第一个表中的记录,例如,第二个表中的PARAM=10和PARAM=20。这样,对于本例,查询应返回:

UID      NAME
1        Name1
3        Name3
…因为只有Name1和Name3同时具有PARAM=10和PARAM=20

我该怎么做?我知道这可能很简单,但我在这里找不到答案,在谷歌也找不到

提前谢谢你!
Ned

此查询应该可以:

SELECT t1.* 
FROM table1 t1 
     INNER JOIN (SELECT PID 
                 FROM table2  
                 WHERE PARAM IN(10, 20)
                 GROUP BY PID
                 HAVING COUNT(*) = 2
                )t2
                ON t1.UID = t2.PID;

通过声明表table1 a,您可以通过将声明的表名称放入a列的from来调用此表中的任何列。名称不必加入:

从表1中选择* UID在哪里 从表2中选择UID 其中参数为10,20 试试这个:

select uid,name from t1 where exists (select 1 from t2 where param = 10 and pid = t1.uid) and exists (select 1 from t2 where param = 20 and pid = t1.uid);

现在它将是空的结果,因为param不能在同一行中为10和20:是的,我只需要第一个表中同时具有param=10和param=20的记录。。。e、 g.它应该只返回Name1和Name3,因为Name2的param=10,但它没有param=20。在那里尝试我的编辑,这应该只返回同时包含10和20的名称。或者我将列名作为名称,再试一次这将基本上返回所有计数为2的a.name,因此,由于name2只有param=10,而没有param=20,因此它只会在a.UID=b.PID上的select a.name内部联接table2b中出现一次,其中b.param在10,20中,其中as name1和name3都有param=10和param=20,因此它们都会出现两次。。。这意味着count*=2只返回name1和name3,而不是name2,因为它只出现一次。。。如果语句有count*谢谢,但您的解决方案也返回Name2,它的PARAM=10,但没有PARAM=20。。我需要有同时包含PARAM=10和PARAM=20的记录。第一个记录不正确,如果只有10,它将返回结果,因为这在10,20中得到满足。检查我的查询,希望它能工作!谢谢你的回答!您的解决方案甚至更好,因为您的方式可以更轻松地连接更多表,如表2,并在不同条件下进行更大的搜索!谢谢,但是您的解决方案也返回Name2,它的PARAM=10,但没有PARAM=20。。我需要把PARAM=10和PARAM=20放在一起的记录。对不起,我理解你的问题的方式是用10或20的行。你的解决方案是可行的,但是有没有更简单的方法?我在表2中有很多很多参数,它们应该符合标准。如果用户检查20个参数,我将不得不进行20次连接。。。更不用说,我必须在同一个查询中以相同的方式连接更多具有匹配条件的表,如表2,但如果我成功地使用一个表,这将很容易
select uid,name from t1 where exists (select 1 from t2 where param = 10 and pid = t1.uid) and exists (select 1 from t2 where param = 20 and pid = t1.uid);
select distinct t1.id 
from table1 t1 join table2 t2 on t1.uid = t2.pid and t2.param = 10 
               join table2 t3 on t1.uid = t3.pid and t3.param = 20