2012-03-16 79 views
-7

我有兩個表 「客戶端」 和數據庫中的 「建議」,MySQL查詢問題與選擇

db.client => ID,名稱
db.proposal => clientID的,投標套件

select * from proposal將選擇所有ClientID的投標套件和
我想查詢,以便它打印所有proposal.proposalID與client.name代替clientID的

+2

開始閱讀有關SQL連接 – 2012-03-16 22:54:11

+0

其迷惑我,我是考慮到它會使用內部連接,但令人困惑,我認爲內連接不會解決我的問題。其他的解決方案,我必須在PHP中創建一個循環來獲取每個id的名稱,這顯然是最糟糕的想法 – user794624 2012-03-16 22:54:19

+0

@ user794624,因爲Mark建議您最好閱讀關於連接的更多信息。雖然我不會在這裏使用'INNER'加入,但我會使用一個。 – SeeSharp 2012-03-16 22:56:41

回答

2

另一種方法,以 「加盟」 兩個表:

SELECT proposal.proposalID, client.name 
FROM client, proposal 
WHERE proposal.clientID = client.id; 

警告:我沒有測試這一點。

爲了理解發生了什麼,我建議您瞭解有關SQL聯接的更多信息。 一些鏈接,讓你開始:

http://www.w3schools.com/sql/sql_join.asp

http://en.wikipedia.org/wiki/Join_%28SQL%29

https://www.google.com/search?q=sql+join

+2

避免使用此舊式語法。對於像這樣的非常簡單的查詢來說沒問題,但對於更復雜的查詢會變得混亂。使用'JOIN ... ON'可以將連接標準保留在相關表格的旁邊,並使'WHERE'子句僅包含過濾標準。 – nnichols 2012-03-16 23:12:45

+1

我剛剛注意到這個答案已被接受。我寫這個來顯示另一種方法(除了使用'JOIN'關鍵字),但是,正如nnichols所指出的,我建議避免使用這種語法,特別是對於複雜的語句。 – 2012-03-16 23:33:00

3

只需使用一個join

SELECT client.name, proposal.proposalID 
    FROM client 
    JOIN proposal 
    ON proposal.clientID = client.id 
; 
1

很簡單。使用兩個表的join

SELECT c.name, p.proposalID 
FROM client as c LEFT JOIN proposal as p 
ON c.id=p.clientID 

您應該通過指定的鏈接來決定連接的類型。你可以使用LEFt,RIGHT,INNER取決於你想要的。

+1

爲什麼左連接?我很清楚OP在要求內部連接。 (或者實際上,對於正確的連接,但我假設內部連接會給出與此數據集的正確連接相同的結果。) – ruakh 2012-03-16 23:02:40