如何选择一个表然后加入另一个表mysql

时间:2017-05-15 05:51:49

标签: mysql

所以我有两张桌子。

用户

users_id   |   firstname    |  lastname
10001      |      mike      |    lapiz
10002      |      tom       |    jerry

配置文件

profile_id   |   department   |   specialization
10001        |    Health Dept |     Heart
10002        |   Brain Dept   |     Brain

也许您re curious why i separate the name of the user and the profile.. i have my on reasons for that.. what i wanted to do is to select my all fields from个人资料then join the用户表

我想成为的结果是

users_id | firstname   |  lastname | profile_id  | department   |specialization
10001    |  mike       |   lapiz   |  1001       |  health dept |   heart

这是我的查询..

$sql = SELECT a.profile_id,a.department,a.specialization FROM {tbl_profile {1}} {tbl_users {1}}

发生的事情是它只显示配置文件表..它没有显示其他表..当我尝试AS a LEFT JOIN (SELECT users_id,firstname,lastname FROM tbl_users ) AS b ON a.profile_id = b.users_id

它给我一个错误未知列LEFT JOIN (SELECT b.users_id,b.firstname,b.lastname FROM

3 个答案:

答案 0 :(得分:1)

您应该使用内部联接而不是嵌套的内部联接

    $sql = SELECT a.profile_id,a.department,a.specialization,b.users_id,b.firstname,
           b.lastname FROM tbl_profile AS a  inner join tbl_users b
           ON a.profile_id = b.users_id     

答案 1 :(得分:1)

你误解了联接是如何运作的。

FROM tbl_profile JOIN tbl_users ON ...

连接两个表,即将给定条件的记录组合成ON。

FROM tbl_profile JOIN (SELECT * FROM tbl_users)

完全一样。如果直接加入表或加入表的记录没有区别,因为这意味着完全一样。

FROM tbl_profile JOIN (SELECT users_id, firstname, lastname FROM tbl_users)

再次做同样的事情。只有您可以将查询中可以使用的列限制为三个列。因此,如果表中存在更多列,则无法在查询的select或where或order by子句中使用它们。

所以连接意味着只是组合记录。您要显示哪些列,请输入select子句:

SELECT * FROM tbl_profile JOIN tbl_users ON ...

从两个表中选择所有列。

SELECT p.department FROM tbl_profile p JOIN tbl_users u ON ...

仅选择部门。

你想:

SELECT * FROM tbl_users u JOIN tbl_profile p ON p.profile_id = u.user_id

顺便说一下LEFT JOIN是外部联接,即使右表中没有匹配项,您也可以在结果中保留左表中的记录。在您的查询中,您说您想要显示在用户表中没有匹配的配置文件记录,这当然不是有意的。

答案 2 :(得分:0)

如果您希望列出两个表中LEFT OUTER JOIN的所有列,以下查询将满足您的目的:

SELECT * FROM users LEFT OUTER JOIN profile on users.users_id = profile.profile_id

如果您想要如下所示,也可以使用别名:

SELECT * FROM users u LEFT OUTER JOIN profile p on u.users_id = p.profile_id