用一句sql列出在其他資料中沒有的值

edited 十月 2013 in 進階PHP討論
我有兩張資料表
資料表usernamelist
欄位username的值有a,b,c

資料表manageconf
欄位username的值有a,b

我想列出usernamelist時只出現c
也就是usernamelist列出來的username,不能在manageconf中出現
我有一個方法是
現列出usernamelist,然後在把每個結果在去查詢manageconf
但這樣似乎不是個好做法
所以想說用一句sql試試,但因功力不夠試了後多方法但還是弄不出來
有人知道要如何用一句sql列出來嗎

原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=2828

評論

  • edited 九月 2007
    試試看...

    select a.* , b.id from usernamelist a left join manageconf b on(a.username = b.username)
    where b.id is NULL
  • edited 九月 2007
    不曉得是不是大大誤解我的意思了@@
    俺的意思是像以下這樣
    資料表usernamelist
    | username | other1...
    | a | adata1...
    | b | bdata1...
    | c | cdata1...

    資料表manageconf
    | username | other2...
    | a | adata2...
    | b | bdata2...

    然後會列出 c 這筆資料,也就是要列出manageconf沒有而usernamelist有的的username
  • edited 九月 2007
    treble 你是過我寫的 sql 了嗎?

    麻煩你試過再來說吧.. 不然只是讓自己更丟臉而已...
  • edited 九月 2007
    我試過了這個sql沒有成功,大概俺資質太差了,有幾個地方我一直無法滲透
    就是前輩所指的on(a.username = b.username)的這行
    是指a資料表的username欄位=b資料表的username欄位嗎@@?
    如果是,那前輩大大可能真的誤解的意思了
    如果不是,還請前輩大大稍微解說一下@@
    還有俺比較不會講話,若有冒犯之處還請多多原諒
  • edited 九月 2007
    Darkhero大大寫的sql意思沒錯,看起來你sql不熟的樣子?多看看關於join的資料吧。

    他寫的sql跟你的table schemas不太一樣,跑起來會有問題,但是修改一下符合你的table schemas應該就沒問題了。主要就是應用left join。看起來你不懂on是什麼意思嗎?那不是where喔,是join的條件。使用LEFT JOIN的原因是,被JOIN的TABLE即使沒有相符的資料,也會被JOIN進來,但是欄位的值會變成NULL,這樣了解了嗎?所以最後用WHERE b.username is NULL來把b沒有而a有的資料篩選出來。

    我這樣講應該很清楚了,你自己把sql寫出來試試看。
  • edited 十月 2007
    我懂了
    我一開始把darkhero大大的a,b,以為是我說的2筆資料,難怪一直覺得怪怪的
    現在突然才發現a,b其實是指兩張資料資料表XD,不知為何一開始看都轉不過來
    感謝兩位大大的說明,學到了left join的用法
    不過在研究兩位的說明時,發現用sql差集也可以解決這樣的問題
    是個大豐收
  • edited 十月 2007
    感謝fillano的協助說明..^_^..

    SQL 語法中 Left join 算是很重要,且是非常常用到的語法喔,你可以多看看相關的資料,研究一下怎麼用比較好喔。
Sign In or Register to comment.