在解决问题之前要指出的一个问题是,每个查询中的查询UNION
都是不同的,并且需要自己的WHERE
子句。整体上唯一适用于的子句UNION
是ORDERBY
。因此,您的查询需要进行一些调整:
SELECT nombre
FROM dbo.internados
WHERE nombre = ? -- the added line
UNION
SELECT nombre
FROM dbo.universidades
WHERE nombre = ?
;
其次,如果您希望两个表都具有相同的功能nombre
(虽然尚不完全清楚,但我想这是对的),那么这将不起作用,因为nombre
如果在 _两个_表中都找到了该值,它只会返回一个。解决此问题的最佳方法可能就是进行联接:
SELECT I.nombre
FROM
dbo.internados I
INNER JOIN dbo.universidades U
ON I.nombre = U.nombre
WHERE
I.nombre = ?
AND U.nombre = ? -- perhaps not needed, but perhaps helpful
;
我不确定100%确切地了解您要查找的内容,因此,如果我错过了成绩,请大声说出来。
你可以想想JOIN
,并UNION
这种方式:
请注意UNION
,虽然不理想,但可以将其修改以完成工作:
SELECT nombre
FROM (
SELECT nombre
FROM dbo.internados
WHERE nombre = ?
UNION ALL
SELECT nombre
FROM dbo.universidades
WHERE nombre = ?
) N
GROUP BY nombre
HAVING Count(*) = 2
;
这样,我们确保有两个值。请注意,这假设每个表中不能有两个相同的名称。如果是这样,则需要更多工作才能使该UNION
方法完成工作。