Tôi có một bảng nói table1
có 3 cột column1, column2 and column3
.LEFT OUTER JOIN và SUBSELECT trong MySQL
column1
và column2
là FOREIGN KEY
với 2 bảng khác. Tuy nhiên, dữ liệu trong column3
là từ n số bảng.
Ví dụ: Hãy để chúng tôi xem xét Facebook. Để hiển thị các hoạt động, nó có thể duy trì một bảng có thể có user1 photoliked photo1
hoặc user1 statusliked status1
. Vì vậy, trong trường hợp này, column3
không được là FOREIGN KEY
với một bảng cụ thể.
Hiện nay có 2 cách để nhận được dữ liệu thực tế -
cách 1 -
SELECT user_id,
verb_id,
CASE WHEN verb_id = photoliked THEN
(SELECT photo_name FROM photos WHERE photo_id = column3) -- getting the desired data from the third column
WHEN verb_id = statusliked THEN
(SELECT status FROM statustable WHERE status_id = column3)
ELSE '' END AS performedon
FROM table1
JOIN table2 ON user_id = user_id -- joining the first column
JOIN table3 ON verb_id = verb_id -- joining the second column
2 cách -
SELECT user_id,
verb_id,
CASE WHEN verb_id = photoliked THEN
p.photo_name
WHEN verb_id = statusliked THEN
s.status
ELSE '' END AS performedon
FROM table1
JOIN table2 ON user_id = user_id -- joining the first column
JOIN table3 ON verb_id = verb_id -- joining the second column
LEFT JOIN photos p ON p.photo_id = column3 -- joining the column3 with specific table
LEFT JOIN statustable s ON s.status_id = column3
Câu hỏi
nào trong 2 cách tốt hơn là truy xuất dữ liệu? và truy vấn nào ít tốn kém hơn?
có thể lặp lại http://stackoverflow.com/a/10684539/1239506 –
Không nó không được lặp lại. Trong câu hỏi đó, có một 'IN' trong mệnh đề' WHERE' và 'SUBSELECT' không phụ thuộc vào bất kỳ cột nào của truy vấn chính. – JHS
Truy vấn thứ hai tốt hơn ... –