SQL 将来自同一 table 的 2 个查询合二为一

SQL join 2 queries in one from same table

我有一个table这样的

IVA

id - taxa - name   - date
1  - 0.18 - normal - 1/1/2014
2  - 0    - none   - 1/1/2014 
3  - 0.23 - max    - 1/1/2013
4  - 0.16 - normal - 1/1/2015
...

我有一个产品的 IVA.id,我想知道当前日期的分类单元是什么。

所以我必须查询这个 table 两次:

Select name 
from IVA 
where id = 1; (return me normal)

Select taxa 
from IVA 
where name = 'normal' 
  and date <= '12/12/2015'; 

我可以将这两个查询合并为一个吗?

谢谢

取决于您使用的数据库引擎,但您可能需要查找数据库的 UNION 关键字。

请尝试:

Select taxa 
from IVA 
where name in (Select a.name from IVA a where a.id = 1) 
and date<='12/12/2015';

为什么不使用如下子查询:

Select taxa 
from IVA 
where name=(select top 1 name from IVA where id = 1)
and date<='12/12/2015'; 

我假设如果有重复的 ID,您可能会得到不同的名称,因此是 Top 1。 如果您想使用 IN 子句中使用的所有名称作为 :

Select taxa 
from IVA 
where name IN (select name from IVA where id = 1)
and date<='12/12/2015'; 

PS : Top 1 可能不适用于所有场景。它是特定于引擎的。

您可以尝试以下方法:

SELECT i1.name, i1.taxa
  FROM iva i1, iva i2
 WHERE i1.date <= '12/12/2015'
   AND i1.name = i2.name
   AND i2.id = 1

您没有在问题中指定 DBMS,所以我不能完全确定上述日期格式是否有效。