2

彼ら、

私は2つのテーブルを持っています:

表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

2 つのテーブル (t1.UID=t2.PID) を結合し、(たとえば) 2 番目のテーブルに PARAM=10 と PARAM=20 の両方がある最初のテーブルのレコードのみを一覧表示する必要があります。このように、この例では、クエリは次を返す必要があります。

UID      NAME
1        Name1
3        Name3

..なぜなら Name1 と Name3 だけが PARAM=10 と PARAM=20 の両方を持っているからです。

これどうやってするの?私はそれがおそらく非常に単純であることを知っていますが、答えもここもグーグルでも見つかりません。

前もって感謝します!ネッド

4

5 に答える 5

3
select a.name          
from table1 a
inner join table2 b on (a.UID = b.PID)
where b.param in (10, 20)
group by a.name
having count(*) = 2

テーブルを宣言するtable1 aことにより、列の from に宣言された名前のテーブルを配置することにより、このテーブルから任意の列を呼び出すことができますa.name

于 2012-08-29T10:01:31.140 に答える
1
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
于 2012-08-29T10:04:04.930 に答える
1

このクエリは機能するはずです:

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;
于 2012-08-29T10:00:36.260 に答える
0

参加する必要はありません:

SELECT * FROM TABLE1 WHERE UID IN(SELECT UID FROM TABLE2 WHERE PARAM IN(10、20))

于 2012-08-29T10:03:25.367 に答える
0

これを試して:

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);
于 2012-08-29T10:03:26.690 に答える