我被這個簡單的查詢困住了,因爲它之前沒有嘗試過。簡單的MySQL連接問題
我有一個用戶表,User_Widget表和一個Widget表。
一個簡單的內部聯接通過加入user_widget.user_id = user.user_id向我顯示他們擁有哪些小部件。
我將如何在Widget表中顯示他們沒有的小部件?
我被這個簡單的查詢困住了,因爲它之前沒有嘗試過。簡單的MySQL連接問題
我有一個用戶表,User_Widget表和一個Widget表。
一個簡單的內部聯接通過加入user_widget.user_id = user.user_id向我顯示他們擁有哪些小部件。
我將如何在Widget表中顯示他們沒有的小部件?
感謝Bart詹森我查詢到:
SELECT * FROM widgets
WHERE NOT EXISTS (
SELECT * FROM widget_user
WHERE widgets.widget_id = widget_user.widget_id
AND user_id = "ID NUMBER OF PERSON YOU WANT"
)
ORDER BY RAND()
LIMIT 10
乾杯傢伙
查找WHERE您的文檔子查詢中NOT EXISTS ..
這是一個猜測,(我還沒有嘗試過),但試試這個:
Select Distinct u.*, Z.*
From User u
Left Join
(Select u.UserId, w.*
From Widget w
Where Not Exists
(Select * From User_Widget
Where userId = u.UserId
And widgetId = w.WidgetId)) Z
On Z.userId = u.UserId
使用CROSS JOIN和一個左外連接(這是從我的MS SQL經驗,但這個概念應該保留)。
它的工作原理是這樣的。子查詢獲取用戶和小部件的所有可能組合。
LEFT OUTER JOIN使您的User_Widgets關聯發揮作用。
WHERE CLAUSE的IS NULL部分將排除用戶具有的小部件,只給出那些不包含小部件的部件。
SELECT allpossible.User_ID, allpossible.Widget_ID FROM
(
SELECT User_ID, Widget_ID FROM
Users
CROSS JOIN
Widgets
) allpossible
LEFT OUTER JOIN
User_Widgets uw
ON
allpossible.User_ID = uw.User_ID
AND allpossible.Widget_ID = uw.Widget_ID
WHERE
uw.UserID IS NULL
SELECT * FROM widgets WHERE id NOT IN
(
SELECT widget_id FROM user_widgets WHERE user_id = 1
)
(其中1是你感興趣的用戶的ID)
SELECT *
FROM widgets w
LEFT OUTER JOIN user_widget uw
ON w.id = uw.widget_id AND uw.user_id = 1 // or whatever user u want
WHERE uw.widget_id IS NULL;
我只想在個人和令人討厭的筆記上補充一下,CR OSS JOIN可能是我最喜歡的連接。很少使用,但在某些情況下效果很好。 – 2010-01-19 17:23:48