所以我有两张桌子。
用户
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
答案 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