2012-10-02 43 views
3

我的問題並不完美,但基本上這是一個問題。如何確保在連接到多個值時不返回值?

我在表「工作」中有兩列。一列是姓氏列表,另一列是人民生活的城市列表。

我不希望我的查詢返回住在芝加哥的任何人。

我當前的代碼是:

select lives.last_name 
from lives 
where lives.city <> "Chicago"; 

但有些人生活在兩個芝加哥和其他地方,比如邁阿密,他們仍然顯示。我怎麼只返回的人誰不生活在芝加哥,而無需使用組或計數功能(不那麼遠,)

感謝

+0

如果一個人可以駐留在一個以上的城市將更加連貫創建一個表分配他們接受這個人的ID ,身份證/城市名稱。 但在你的情況下,你可以使用二進制搜索。 – PiLHA

回答

1

嘗試使用NOT IN

SELECT last_name 
FROM lives 
WHERE last_name NOT IN 
    (
    SELECT last_Name 
    FROM lives 
    WHERE city = 'Chicago' 
    ) 
+0

謝謝。 「不在」等同於「除外」還是其他內容? – DILLBOSS

+0

當右查詢中沒有匹配的行時,EXCEPT運算符將查詢中的所有不同行從EXCEPT運算符的左側返回。 EXCEPT運算符的工作方式與NOT IN相同。 –

+0

[請參閱:比較EXCEPT運算符與NOT IN](http://blog.sqlauthority.com/2007/05/22/sql-server-2005-comparison-except-operator-vs-not-in/) –

2

你可以使用這樣的事情與NOT EXISTS

select a.last_name 
from lives a 
where not exists (select last_name 
        from lives b 
        where a.last_name = b.last_name 
         and city = 'chicago') 

SQL Fiddle with Demo

0

您可以姓氏選擇所有城市羣,然後過濾記錄不containign芝加哥:

Select Last_name, City 
from lives 
group by Last_name 
having group_concat(city) not Regexp 'Chicago'