从具有不同数据类型列的不同表中选择列

时间:2014-12-01 09:42:31

标签: sql select join

我想知道如何编写一个查询,从2个不同的表中选择特定列(不常见)并将它们组合在一起。

我尝试了这个,但没有奏效:

SELECT ii.sequence
FROM Costs ii
WHERE ii.order_ID IN (SELECT book.order_ID
                      FROM BookInfo ci
                      WHERE ii.order_ID = ci.order_ID)
UNION
SELECT ft.released_title
FROM FinishedBook ft
WHERE ft.version IN (SELECT ii.iiversion
                     FROM Costs ii
                     WHERE ii.iiorder_ID IN (SELECT ci.order_ID
                                             FROM BookInfo ci
                                             WHERE ii.iiorder_ID = ci.order_ID))
ORDER BY sequence;

4 个答案:

答案 0 :(得分:0)

对于MSSQL Server,使用Join获取结果。

SELECT I.Sequence, F.Released_Title FROM FinishedTrack AS F
INNER JOIN IncludedIn AS I ON I.ORIGINATESFROM = F.IIORIGINATESFROM
INNER JOIN CdInfo AS A ON A.ALBUM_ID = I.IIALBUM_ID
ORDER BY I.Sequence DESC

答案 1 :(得分:0)

这不是加入这些表并调用Distinct以避免重复的情况吗? 试试这个:

select Distinct a.Sequence, b.RELEASED_TITLE
from IncludedIn a inner join FinishedTrack b
 on a.OriginatesFrom = b.IIOriginatesFrom 
 Inner join CdInfo c on a.IIALBUM_ID = c.ALBUM_ID
Order By a.Sequence

答案 2 :(得分:0)

此查询可能适合您

SELECT IncludedIn.SEQUENCE, FinishedTrack.RELEASED_TITLE
FROM FinishedTrack
INNER JOIN IncludedIn
ON FinishedTrack.ORIGINATESFROM=IncludedIn.IIORIGINATESFROM and
FinishedTrack.VERSION=IncludedIn.IIVERSION order by FinishedTrack.SEQUENCE;

答案 3 :(得分:0)

您需要使用JOIN而不是UNION:

SELECT ii.sequence, ft.released_title
FROM IncludedIn ii
INNER JOIN CdInfo ci ON ii.iialbumid = ci.album_id
INNER JOIN FinishedTrack ft on ft.originatesfrom = ii.iioriginatesfrom
ORDER BY ii.sequence;