带有WHERE定义的SQL查询来自另一个表

时间:2014-03-30 15:08:42

标签: sql sql-server

在此SQL查询中:

SELECT * FROM CallRecords 
WHERE DNIS = '3216547' 
ORDER BY date DESC

但是在DNIS =''的WHERE语句中,我希望采用3216547,但请查看另一个表,我有一个不同DNIS的列表,例如:

3216547
9874560
7418523

通常声明如下:

SELECT * FROM CallRecords 
WHERE (DNIS = '3216547' OR DNIS = '9874560' DNIS = '7418523') 
ORDER BY date DESC

这个有三个的查询很好,但我希望这可以在400个DNIS条目中进行选择。我是否能够在WHERE子句中执行子查询,或者这是否可行。

4 个答案:

答案 0 :(得分:1)

SELECT * FROM CallRecords 
WHERE DNIS IN (SELECT DNIS FROM DNIS_TABLE)
ORDER BY date DESC

如果你需要来自另一个表的所有DNIS,你可以进行该查询。

答案 1 :(得分:1)

SELECT *
FROM CallRecords
WHERE DNIS IN (SELECT DNIS FROM OtherTable [...])
ORDER BY date DESC

答案 2 :(得分:1)

如果您想从不同的故事中获取数字,可以使用子查询:

SELECT * FROM CallRecords 
WHERE DNIS IN (SELECT DISTINCT DNIS FROM DNIS_TABLE) 
ORDER BY date DESC

答案 3 :(得分:0)

我只使用连接而不是子查询。如果您需要过滤另一个表中的dnis值,请使用where子句,这样做通常会这样做。

select c.*
  from callrecords c
  join dnis_tbl d
    on c.dnis = d.dnis
 order by date desc

但是,如果另一个表为dnis的每个值包含多个行,则需要在where子句中使用子查询将其减少到一行(如果正确编制索引,则可能比使用distinct更好)