2016-12-01 59 views
0

我的數據具有orderid,userid和userage以及許多其他數據。 現在年齡是用戶可以提供的東西,只要他/她願意。獲取屬性不存在於所有行中的用戶的數據-sql

的樣本數據

orderid userid userage 
1   1 
2   2 
3   1 
4   1  18 
5   3  25 

現在,如果我想找到所有orderids爲userage = 18,我不能做一些爲Select orderid from table where userage=18,因爲它會給我只訂單ID「4」。 我想要一個單獨的查詢應該最好適用於任何分貝(就像我正在使用sql server,它可能會改變任何時間),這將給我帶來orderid'1','3'和'4'的結果。

感謝

+0

什麼是預期結果..? – Mansoor

回答

3

您還沒有披露如何表示丟失的數據。許多DBMS設計使用NULL值。如果這是你的情況

SELECT orderid FROM table WHERE (userage = 18 OR userage IS NULL) 

將工作。

如果使用-1缺失數據(你可能不這樣做,但我想在這裏做點)

SELECT orderid FROM table WHERE (userage = 18 OR userage = -1) 

會工作。

請注意,如果列值爲NULL,則不會檢驗相等或不等的情況。您必須IS NULLIS NOT NULL來測試NULL。

在Oracle中,零長度文本字符串爲NULL。其他數據庫管理系統並非如此。

如果你從誰擁有曾經給出18的時代,用戶在尋找所有的訂單,這將這樣的伎倆

SELECT orderid 
    FROM table 
    WHERE userid IN (SELECT userid FROM table where userage = 18) 
-1

請試試這個:

Select orderid from table where orderid in (1,3,8) 
+3

處理OP正在嘗試確定orderid值。 –

4

,我認爲你所要求的所有的OrderID其中userid的18.

一個userage值。在這種情況下,以下應該工作:

SELECT orderid 
FROM TABLE 
WHERE userid IN (SELECT DISTINCT userid 
       FROM TABLE 
       WHERE userage = 18) 
+0

在子查詢中不需要SELECT DISTINCT。 – jarlh

+0

是的你是對的,我沒有正確思考 – JimNicholson

0

除了IN語法(見其他答案) 這也可以通過標準JOIN在大多數RDMBS數據庫中完成。

select orderid 
from YOURTABLE o 
join (select distinct userid from YOURTABLE where userage = 18) u 
    on (o.userid = u.userid); 

還有一些支持WHERE EXISTS語法,但它不太常見。

select orderid 
from YOURTABLE o1 
where exists (
    select 1 
    from YOURTABLE o2 
    where o2.userage = 18 
    and o1.userid = o2.userid 
    ); 
相關問題