Ein Problem, darauf zu hinweisen, bevor wir das Problem lösen, besteht darin, dass jede Abfrage in einem UNION
verschieden ist und erfordert eine eigene WHERE
Klausel. Die einzige Klausel, die für die UNION
als Ganzes gilt, ist ORDER BY
. So Ihre Abfrage können wie einige Optimierungen benötigt:
SELECT nombre
FROM dbo.internados
WHERE nombre = ? -- the added line
UNION
SELECT nombre
FROM dbo.universidades
WHERE nombre = ?
;
Zweitens, wenn Sie die beiden Tabellen wollen beide die gleiche nombre
haben (was nicht ganz klar ist, aber ich vermute, das ist richtig), dann das wird nicht Arbeit, weil es einfach einen nombre
zurückgibt, wenn der Wert in entweder Tabelle gefunden wird. Wahrscheinlich der beste Weg, dies zu lösen, ist nur ein tun beitreten:
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
;
Ich bin nicht 100% sicher, dass ich verstehe genau, was Sie suchen, bitte sprechen, wenn ich die Marke verpasst haben.
können Sie über JOIN
und UNION
so denken:
JOIN
: verbindet Reihen horizontal
- Spiele sie auf Bedingungen
- Erstellt neue Spalten
- Doesn‘ t genau crea te Zeilen, da alle Daten aus vorhandenen Zeilen stammen, aber wird eine Zeile aus einer Eingabe duplizieren, wenn die Bedingungen mit mehreren Zeilen in der anderen Eingabe übereinstimmen. Wenn beide Eingaben Duplikate enthalten, multipliziert sie die Anzahl der Zeilen von einer Eingabe mit der Anzahl der übereinstimmenden Zeilen von der anderen.
- Wenn es überhaupt keine Übereinstimmungsbedingung gibt (denke
CROSS JOIN
), dann können Sie ein kartesisches Produkt erhalten, bei dem jede Zeile in einer Eingabe mit jeder Zeile in der anderen übereinstimmt.
- Wenn ein
OUTER
join-- LEFT
, RIGHT
, FULL
--wenn Zeilen aus dem inneren Eingang (oder Eingabe entweder mit FULL
) kann die andere nicht übereinstimmt, wird NULL
s in den Spalten für den anderen Eingang gelegt werden.
UNION
: Stapel Reihen vertikal
- Im Allgemeinen schafft neue Reihen
- keine Bedingungen verwendet werden, gibt es keine wirkliche Anpassungs
UNION
selbst ist (nicht UNION ALL
) wird entfernen Sie doppelte Zeilen, auch wenn eine Eingabe keine Zeilen enthält
Beachten Sie, dass die UNION
modifiziert werden könnte, um die Arbeit zu tun, obwohl dies nicht ideal ist:
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
;
Auf diese Weise stellen wir sicher, gibt es zwei Werte. Beachten Sie, dass davon ausgegangen werden kann, dass nicht zwei Namen in jeder Tabelle vorhanden sein dürfen. Wenn das stimmt, wäre mehr Arbeit nötig, um die UNION
Methode dazu zu bringen, den Job zu machen.
Was bedeutet "es als Array nur dann zurückgeben, wenn es übereinstimmt"? – ErikE
Gibt alle Informationen aus dieser Zeile im Array-Format zurück, wenn Nombre gleich dem übergebenen Wert ist –
Was DBMS und Version, bitte? Was bedeutet "Array-Format"? In SQL gibt es Zeilen und Spalten. Das ist es! – ErikE