开发者

inner join for a query?

开发者 https://www.devze.com 2023-02-21 15:47 出处:网络
I want to do a sql query and have some problems: I want to select from table_1 the ID\'s Where parent_id is the value I have:

I want to do a sql query and have some problems:

  1. I want to select from table_1 the ID's Where parent_id is the value I have:

    SELECT ID 
      FROM table_1 
     WHERE parent_ID = 'x'
    
  2. I want to use the ID'S I got in 1. and

    SELECT 
      FROM ta开发者_高级运维ble_2 
     WHERE ID = 'The ID's from Query 1.'
    


Like this?

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

Edit
Note: the query will potentially produce duplicate rows depending on the keys and relation between the tables. For example, you will get duplicates if, for a given table_1.parent_id = X, there can be multiple occurrences of the same table_1.ID. Another example is when table_2.ID isn't unique.

In those cases you would want to remove the duplicates (using distinct, group by, partitioned @row_number, etc) or, not produce the duplicates in the first place using a semi-join instead (exists, in). Have a look @OMG Ponies answer for reference.


Using IN

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

Using 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')

Using an INNER JOIN

The DISTINCT (or GROUP BY) is necessary to eliminate duplicates if there are more than one records in TABLE_1 that relate to a record in TABLE_2:

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


It can be solved with the use of IN as follows:

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


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


Yes, it's better to you use this:

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

精彩评论

暂无评论...
验证码 换一张
取 消