MySQL查询问题与选择

问题描述:

我有两个表 “客户端” 和数据库中的 “建议”,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

另一种方法,以 “加盟” 两个表:

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

只需使用一个join

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

很简单。使用两个表的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