查询的内部联接?

时间:2011-04-03 21:33:22

标签: mysql sql

我想做一个SQL查询并遇到一些问题:

  1. 我想从table_1中选择ID,其中parent_id是我的值:

    SELECT ID 
      FROM table_1 
     WHERE parent_ID = 'x'
    
  2. 我想使用我在1.和

    中获得的ID
    SELECT 
      FROM table_2 
     WHERE ID = 'The ID's from Query 1.'
    

5 个答案:

答案 0 :(得分:5)

喜欢这个吗?

select ...
  from table_1 a
  join table_2 b on(a.id = b.id)
 where a.parent_id = 'x';

修改
注意:查询可能会产生重复的行,具体取决于键和表之间的关系。例如,如果对于给定的table_1.parent_id = X,可能会出现多次相同的table_1.ID,那么您将获得重复项。 另一个例子是table_2.ID不是唯一的。

在这些情况下,您需要删除重复项(使用不同的,分组依据,分区的@row_number等),而不是首先使用半连接生成重复项(存在,in。看看@OMG小马的答案供参考。

答案 1 :(得分:4)

使用IN

SELECT t2.*
  FROM TABLE_2 t2
 WHERE t2.id IN (SELECT t1.id
                   FROM TABLE_1 t1
                  WHERE t1.parent_id = 'x')

使用EXISTS

SELECT t2.*
  FROM TABLE_2 t2
 WHERE EXISTS (SELECT NULL
                 FROM TABLE_1 t1
                WHERE t1.id = t2.id
                  AND t1.parent_id = 'x')

使用INNER JOIN

如果TABLE_1中有多个与TABLE_2中的记录相关的记录,则DISTINCT(或GROUP BY)是消除重复的必要条件:

SELECT DISTINCT t2.*
  FROM TABLE_2 t2
  JOIN TABLE_1 t1 ON t1.id = t2.id
                 AND t1.parent_id = 'x'

答案 2 :(得分:1)

可以使用IN解决,如下所示:

SELECT * FROM table_2 WHERE ID IN (SELECT ID FROM table_1 WHERE parent_ID = 'x')

答案 3 :(得分:0)

select * from table_2 where id in (select id from table_1 where parent_id = 'x')

答案 4 :(得分:0)

是的,你最好使用它:

SELECT [value]
  FROM [table2]
 WHERE [value] IN (SELECT [value] 
                     FROM [table1]
                    WHERE [value] = "[value]"
                  )