Một vấn đề để chỉ ra trước khi chúng tôi giải quyết vấn đề là mỗi truy vấn trong một UNION
là khác biệt và đòi hỏi WHERE
khoản riêng của mình. Mệnh đề duy nhất áp dụng cho toàn bộ số UNION
là ORDER BY
. Vì vậy, câu hỏi của bạn như là cần một số tinh chỉnh:
SELECT nombre
FROM dbo.internados
WHERE nombre = ? -- the added line
UNION
SELECT nombre
FROM dbo.universidades
WHERE nombre = ?
;
Thứ hai, nếu bạn muốn hai bảng để cả hai có cùng nombre
(mà không phải là hoàn toàn rõ ràng nhưng tôi đoán đó là bên phải), sau đó sẽ không làm việc vì nó chỉ trả về một nombre
nếu giá trị được tìm thấy trong hoặc bảng. Có lẽ cách tốt nhất để giải quyết vấn đề này là chỉ cần tham gia:
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
;
Tôi không chắc chắn 100% rằng tôi hiểu chính xác những gì bạn đang tìm kiếm, vì vậy hãy nói lên nếu tôi đã bỏ lỡ điểm.
Bạn có thể suy nghĩ về JOIN
và UNION
theo cách này:
JOIN
: kết nối hàng ngang
- Matches họ về điều kiện
- Tạo cột mới
- doesn' t chính xác crea các hàng te vì tất cả dữ liệu đến từ các hàng hiện tại, nhưng nó sẽ sao chép một hàng từ một đầu vào khi các điều kiện khớp với nhiều hàng trong đầu vào khác. Nếu cả hai yếu tố đầu vào đều có bản sao thì nó sẽ nhân số lượng hàng từ một đầu vào bằng số lượng hàng phù hợp với nhau.
- Nếu hoàn toàn không có điều kiện đối sánh (suy nghĩ
CROSS JOIN
) thì bạn có thể có được một sản phẩm Descartes là mỗi hàng trong một đầu vào phù hợp với mỗi hàng trong hàng còn lại.
- Khi sử dụng một
OUTER
join-- LEFT
, RIGHT
, FULL
--Nếu như hàng từ các đầu vào bên trong (hoặc một trong hai đầu vào với FULL
) không phù hợp với người kia, NULL
s sẽ được đặt vào các cột cho các đầu vào khác.
UNION
: ngăn xếp hàng theo chiều dọc
- Nói chung, tạo mới hàng
- Không có điều kiện được sử dụng, không có phù hợp với thực
UNION
bởi chính nó (không UNION ALL
) sẽ xóa các hàng trùng lặp, ngay cả khi một đầu vào không có hàng
Lưu ý rằng UNION
có thể được sửa đổi để thực hiện công việc, mặc dù đây không phải là lý tưởng:
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
;
Bằng cách này chúng tôi đảm bảo có hai giá trị. Lưu ý điều này giả định rằng không thể có hai cùng tên trong mỗi bảng. Nếu đó là sự thật, cần phải có nhiều công việc hơn để thực hiện phương thức UNION
.
"Chỉ trả lại dưới dạng mảng khi nó khớp" có nghĩa là gì? – ErikE
Trả lại tất cả thông tin từ hàng đó ở định dạng mảng khi nombre bằng giá trị được chuyển đến nó –
DBMS và phiên bản nào, vui lòng? Ngoài ra, "định dạng mảng" nghĩa là gì? Trong SQL có các hàng và cột. Đó là nó! – ErikE