SQL将来自同一表的两个查询合并到一个查询中

SQL将来自同一表的两个查询合并到一个查询中,sql,Sql,我有一张这样的桌子 伊娃 我有一个产品的IVA.id,我想知道目前的分类群是什么 所以我必须查询这个表两次: Select name from IVA where id = 1; (return me normal) Select taxa from IVA where name = 'normal' and date <= '12/12/2015'; 我可以将这两个查询合并为一个查询吗 谢谢取决于您使用的数据库引擎,但您可能需要查找数据库的UNION关键字。取决于您使

我有一张这样的桌子

伊娃

我有一个产品的IVA.id,我想知道目前的分类群是什么

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

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

Select taxa 
from IVA 
where name = 'normal' 
  and date <= '12/12/2015'; 
我可以将这两个查询合并为一个查询吗


谢谢

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

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

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

取决于您使用的数据库引擎,但您可能需要查找数据库的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 in (Select a.name from IVA a where a.id = 1) 
and date<='12/12/2015';
请尝试:

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 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,您可能会得到不同的名称,因此排名前1。 如果要将子句中使用的所有名称用作:

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

注:TOP1可能不适用于所有场景。它是特定于引擎的。

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

Select taxa 
from IVA 
where name=(select top 1 name from IVA where id = 1)
and date<='12/12/2015'; 
我假设如果有重复的ID,您可能会得到不同的名称,因此排名前1。 如果要将子句中使用的所有名称用作:

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

注:TOP1可能不适用于所有场景。它是特定于引擎的。

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

Select taxa 
from IVA 
where name=(select top 1 name from IVA where id = 1)
and date<='12/12/2015'; 
我假设如果有重复的ID,您可能会得到不同的名称,因此排名前1。 如果要将子句中使用的所有名称用作:

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

注:TOP1可能不适用于所有场景。它是特定于引擎的。

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

Select taxa 
from IVA 
where name=(select top 1 name from IVA where id = 1)
and date<='12/12/2015'; 
我假设如果有重复的ID,您可能会得到不同的名称,因此排名前1。 如果要将子句中使用的所有名称用作:

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

注:TOP1可能不适用于所有场景。它是特定于发动机的。

您可以尝试以下方法:

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,因此我不能完全确定上述日期格式是否有效。

您可以尝试以下方法:

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,因此我不能完全确定上述日期格式是否有效。

您可以尝试以下方法:

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,因此我不能完全确定上述日期格式是否有效。

您可以尝试以下方法:

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,因此我不能完全确定上述日期格式是否有效。

不是每个DBMS都会使用TOPthnx来指出:,我将在回答中提到。表的ID应该是唯一的,因此,对于指定的ID,您应该始终获得1或0行。因此,您可以使用=而不使用任何TOP或LIMIT子句。理想情况下,它应该是唯一的,我只是格外小心,看到有人使用名为ID的外键,但对于thnx的建议,我很感激:不是每个DBMS都会使用TOPthnx来指出:,我会在回答中提到这一点。一个ID对于一个表应该是唯一的,所以对于一个指定的ID,您应该总是得到1或0行。因此,您可以使用=而不使用任何TOP或LIMIT子句。理想情况下,它应该是唯一的,我只是更加小心了,看到有人使用名为ID的外键,但是对于建议,thnx,我很感激:并不是每个DBMS都会有TOPthnx来指出这一点:,我会在我的回答中提到这一点。一个ID对于一个表应该是唯一的,所以对于一个指定的ID,你应该总是得到1或0行。你可以使用=而不使用任何TOP或LIMIT子句。理想情况下,它应该是唯一的,我只是格外小心,我见过有人使用名为id的外键,但thnx对于这个建议,我很感激:并不是每个DBMS都会使用TOPthnx来指出:,我会在我的回答中提到这一点。对于表,id应该是唯一的,因此,对于指定的ID,您应该始终获得1或0行。因此,您可以使用=而不使用任何TOP或LIMIT子句。理想情况下,它应该是唯一的,我只是格外小心,看到有人使用名为ID的外键,但对于建议,我很感激:我不知道为什么工会在这里会有用。也许我误解了这个问题。。。考虑到上面的查询是从数据库的两个明显不同的行中提取的,似乎ID是一个递增的int,正在提取不同的列,并且原始海报没有提供他们希望其输出看起来像什么的示例。。。我想他们希望两个查询的结果都在一个结果中,而不是一个返回一行的查询。不知道为什么UNION在这里有用。也许我误解了这个问题。。。考虑到上面的查询是从数据库的两个明显不同的行中提取的,似乎ID是一个递增的int,正在提取不同的列,并且原始海报没有提供他们希望其输出看起来像什么的示例。。。我以为他们想要tw的两个结果

o在一个结果中查询,而不是返回一行的单个查询。不确定为什么UNION在这里有用。也许我误解了这个问题。。。考虑到上面的查询是从数据库的两个明显不同的行中提取的,似乎ID是一个递增的int,正在提取不同的列,并且原始海报没有提供他们希望其输出看起来像什么的示例。。。我想他们希望两个查询的结果都在一个结果中,而不是一个返回一行的查询。不知道为什么UNION在这里有用。也许我误解了这个问题。。。考虑到上面的查询是从数据库的两个明显不同的行中提取的,似乎ID是一个递增的int,正在提取不同的列,并且原始海报没有提供他们希望其输出看起来像什么的示例。。。我以为他们希望两个查询的结果都在一个结果中,而不是一个返回一行的查询。谢谢,如果我只想要最接近的数据,我该怎么办?明白了!从IVA中选择前1个分类群,其中名称在从IVA中选择a.name,其中a.id=1和日期这太好了,你自己做的。问候。谢谢,如果我只想要最接近的数据,我该怎么办?明白了!从IVA中选择前1个分类群,其中名称在从IVA中选择a.name,其中a.id=1和日期这太好了,你自己做的。问候。谢谢,如果我只想要最接近的数据,我该怎么办?明白了!从IVA中选择前1个分类群,其中名称在从IVA中选择a.name,其中a.id=1和日期这太好了,你自己做的。问候。谢谢,如果我只想要最接近的数据,我该怎么办?明白了!从IVA中选择前1个分类群,其中名称在从IVA中选择a.name,其中a.id=1和日期这太好了,你自己做的。问候。您可能也想考虑使用目前的ANSI标准。您可能也想考虑使用目前的ANSI标准。您可能也想考虑使用目前的ANSI标准。您可能也想考虑使用目前的ANSI标准。