2013-04-04 50 views
0

我有一個小的MySQL問題。我想選擇我的表中包含用戶不擁有的數據的所有行(這是一個交換工具)。MySQL - 選擇用戶不擁有的所有行

實施例:

id | owner | event 
---------------------- 
1 | 4 | 3 
2 | 5 | 3 
3 | 3 | 2 
4 | 5 | 6 

我所有者#4。我希望看到的,除了我已經擁有的那些所有的事件,所以我希望得到這樣一個結果:

event | offered by 
------------------- 
2  |  3 
6  |  5 

是可以通過SQL選擇這還是我要選擇所有用戶自己的事件,並刪除其他所有與結果相同的事件id

回答

7
SELECT a.event, a.owner AS `Offered By` 
FROM tableName a 
WHERE a.event NOT IN 
     (
      SELECT b.event 
      FROM TableName b 
      WHERE owner = 4 
     ) 

或通過使用JOIN我更優選,

SELECT a.event, a.owner AS `Offered By` 
FROM tableName a 
     LEFT JOIN tableName b 
      ON a.event = b.event AND 
       b.owner = 4 
WHERE b.event IS NULL 

輸出

╔═══════╦════════════╗ 
║ EVENT ║ OFFERED BY ║ 
╠═══════╬════════════╣ 
║  2 ║   3 ║ 
║  6 ║   5 ║ 
╚═══════╩════════════╝ 
+0

我其實更喜歡你的第一個版本,因爲我的實際陳述比我的示例更廣泛一些。謝謝你的幫助! – michaeln 2013-04-04 14:41:01

0
SELECT event, offered_by FROM events_table WHERE owner <> 4 

,或者如果它們是例如events 2表和offers

SELECT tb1.event, tb1.offered by FROM offers as tb1 
INNER JOIN events as tb2 on tb1.event = tb2.event 
WHERE tb2.owner <> 4 
+1

不,你看到的,有兩個業主一個事件,他不想把它列入在結果返回。 – Mido 2013-04-04 14:17:39

+0

我看到了編輯。現在很好。 – Mido 2013-04-04 14:19:20

+0

你的查詢不會給出正確的結果。第二個將列出表 – 2013-04-04 14:26:16

-1

我只是假設PHP這裏

SELECT event 
FROM EXAMPLE_TABLE 
WHERE owner NOT IN '$owner_id'