2013-07-03 44 views
0

我有如下四個表:如何檢索表值,其中加入的關鍵是不是在連接表

users(
user_id PRIMARY KEY, 
user_name, 
and-other-fields) 

venues(
venue_id PRIMARY KEY, 
venue_name, 
and-other-fields) 

user_venues(
user_venue_id PRIMARY KEY, 
user_id FOREIGN KEY REF users, 
venue_id FOREIGN KEY REF venues, 
and-other-fields) 

venue_quotes(
user_venue_id PRIMARY KEY FOREIGN KEY REF user_venues, 
quote TEXT, 
and-other-fields) 

有在用戶表用戶和場館場地表。用戶請求場地慶祝某個事件,其中指定了場地表中的預算,時間,日期和持續時間,其被稱爲「和其他場」。場地通過venue_quotes表格響應用戶。

咱們說user_venues表有象下面這樣一些數據:

(1,1,1,...) 
(2,1,2,...) 
(3,1,3,...) 
(4,2,1,...) 

並說venue_quotes表有象下面這樣一些數據:

(1, "You are welcome!") 
(2, "We are sorry!") 

我的問題是如何才能挽救這個場館的所有字段,users,user_venues,venue_quotes,條件爲WHERE user_venues.user_venue_id NOT IN venue_quotes.user_venue_id。

我已經嘗試了下面的代碼,但它返回我0行。好難過。

SELECT * 
FROM user_venues 
INNER JOIN users ON users.user_id = user_venues.user_id 
INNER JOIN venues ON venues.venue_id = user_venues.venue_id 
LEFT JOIN venue_quotes ON venue_quotes.user_venue_id = user_venues.user_venue_id 
WHERE venue_quotes.user_venue_id NOT IN (user_venues.user_venue_id) 
LIMIT $offset, $limit 

請幫忙, 謝謝。

+0

你想要得到什麼? –

+0

我希望'user_venues'表的所有字段,但僅限於那些行中來自user_venues表的user_venue_id值不應位於venue_quotes表的user_venues_id中的那些行。 – Lekhnath

回答

0

做加盟的左連接(你有),然後檢查是否爲NULL WHERE子句

事情是這樣的: -

SELECT * 
FROM user_venues 
INNER JOIN users ON users.user_id = user_venues.user_id 
INNER JOIN venues ON venues.venue_id = user_venues.venue_id 
LEFT JOIN venue_quotes ON venue_quotes.user_venue_id = user_venues.user_venue_id 
WHERE venue_quotes.user_venue_id IS NULL 
LIMIT $offset, $limit 
+0

是這項工作對我來說,非常感謝。 – Lekhnath

0

嘗試WHERE venue_quotes.user_venue_id NOT IN (SELECT user_venue_id FROM user_venues)

+0

抱歉說,但它返回相同的結果。我無法理解我自己的代碼意味着什麼'LEFT JOIN venue_quotes ON venue_quotes.user_venue_id = user_venues.user_venue_id WHERE venue_quotes.user_venue_id NOT IN(user_venues.user_venue_id)'。這是有效的聲明 – Lekhnath

0

試試這個

SELECT * 
FROM venue_quotes 
LEFT JOIN user_venues ON venue_quotes.user_venue_id = user_venues.user_venue_id 
INNER JOIN users ON users.user_id = user_venues.user_id 
INNER JOIN venues ON venues.venue_id = user_venues.venue_id 

WHERE venue_quotes.user_venue_id NOT IN (SELECT user_venue_id FROM user_venues) 
LIMIT $offset, $limit 
1

我不認爲你需要加入表格,如果你從選擇。在表檢查venue_quotes

試試這個

SELECT * 
    FROM user_venues 
    LEFT JOIN venue_quotes ON venue_quotes.user_venue_id = user_venues.user_venue_id 
    WHERE venue_quotes.user_venue_id NOT IN (SELECT user_venue_id FROM user_venues) 
    LIMIT $offset, $limit 
相關問題