Mysql多表选择条件

时间:2012-02-22 16:16:41

标签: mysql select conditional-statements

我有一个noob问题,但对我来说是一个麻烦的问题。我在三个表上使用SELECT,其中一个是realtional(持有关系 - 用户ID与Place的ID),第一个是用户表,最后一个地方。我写了这个完美的问题

$query = "SELECT users.Username,usrxplc.User,places.Name
          FROM users,usrxplc,places
          WHERE usrxplc.Place=places.ID AND usrxplc.User=users.ID"

吐出与所有用户关联的所有地方。很好,但我想将它仅限于某个用户。看似简单,但我被卡住了。

2 个答案:

答案 0 :(得分:4)

您使用WHERE子句过滤结果,因此只需为users.ID添加一个子句:

select users.Username,
    usrxplc.User,
    places.name
from users,
    usrxplc,
    places
where usrxplc.Place = places.ID
    and usrxplc.User = users.ID
    and users.ID = 123

答案 1 :(得分:2)

只觉得需要发布备选方案 - 而不是选择和所有表格,您可以使用INNER JOIN将一个表格连接到另一个表格

SELECT 
    users.Username,
    places.Name

FROM users
INNER JOIN usrxplc ON usrxplc.User=users.ID
INNER JOIN places ON places.ID = usrxplc.Place

WHERE users.ID = 111

它在功能上与其他答案相同,但是当您进入更复杂的查询和表时,您会发现使用JOIN可以进行更大程度的优化,因为您可以进一步限制每个JOIN获得的行,例如以下也是有效的,其中User行在加入其他表之前是有限的

SELECT 
    users.Username,
    places.Name

FROM places
INNER JOIN usrxplc ON usrxplc.Place = places.ID
INNER JOIN users ON users.ID = usrxplc.User AND users.ID = 111

在更复杂的查询中,或者如果这些表格要大得多,这通常会提供更优化的查询