2013-04-04 51 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'