我有两个名为NewTable
和OldTable
的表。每个表包含相同的列,分别是id
,type
和name
列。我在id和type列上使用了set运算符(例如:intersect
)。这项工作很清楚。因此,我想添加name
列以选择结果集,但这是一个条件。在进行操作时,请勿使用name
列,这必须在结果集中提供它。
例如:
SELECT id, type FROM NewTable
INTERSECT
SELECT id, type FROM OldTable
该查询应执行,并给我intersect
行,并在NewTable
中给附加名称列。
注意:我可以在intersect
之后使用join运算符来实现。但我想直接得到它,不要使用join
或其他。
我可以吗?
答案 0 :(得分:1)
对于相交,您可以使用内部联接,而不是在相交之后,而不是相交。
SELECT DISTINCT
n.id,
n.type,
n.name
FROM newtable n
INNER JOIN oldtable o
ON o.id = n.id
AND o.type = n.type;
对于,除了可以使用NOT EXISTS
和相关的子查询。
SELECT DISTINCT
n.id,
n.type,
n.name
FROM newtable n
WHERE NOT EXISTS (SELECT *
FROM oldtable o
WHERE o.id = n.id
AND o.type = n.type);
我不确定您要为工会做些什么,也许这对您有用:
SELECT n.id,
n.type,
n.name
FROM newtable n
UNION
SELECT o.id,
o.type,
NULL name
FROM oldtable o
WHERE NOT EXISTS (SELECT *
FROM newtable n
WHERE n.id = o.id
AND n.type = o.type);
它从newtable
和id
的{{1}} type
组合中获取所有记录,这些记录不在名称为{{1 }},因为oldtable
中显然没有名称。
答案 1 :(得分:1)
您无法使用INTERSECT
来实现它,但是可以使用JOIN
来做到这一点,如上所述,或者使用EXISTS
:
SELECT * FROM NewTable nt
WHERE EXISTS(SELECT 1 FROM OldTable
WHERE id = nt.id
AND type = nt.type)
答案 2 :(得分:1)
因此,我想您可以使用INTERSECT
来实现此目的,但实际上并没有任何意义,例如:
SELECT id, [type], [name] FROM NewTable
INTERSECT
SELECT o.id, o.[type], n.[name] FROM OldTable o INNER JOIN NewTable n ON n.id = o.id AND n.[type] = o.[type];