求助一个MySQL多表联查及输出的问题

2014-01-29 14:37:14 +08:00
 SharkIng
现在假设有两个表,一个employee 里面有一个员工号(SSN)名字已经性别
一个dependent(亲属表)里面有相关亲属的名字和关系,对应一个ESSN(和SSN对应的员工号)

现在想通过SELECT FROM以及WHERE语句查出所有对应的男性员工的名字,同时如果有亲属的话亲属一起输出,没有的话则不输出亲属只输出男性员工名字

我用的是$result = mysqli_query($db, "SELECT LNAme, SSN, D_Name, Relationship FROM Emplyee, Dependent WHERE Employee.Sex = 'M' AND ESSN = SSN;")

输出时候写:
echo "$LName, $SSN, $D_Name, $Relationship";

但是这样的时候,要么输出的是在亲属关系里面有的,没有的就不输出了

如果把WHERE那里的AND改成OR,输出就完全乱了

这种情况正确的应该是怎么做的??
3588 次点击
所在节点    MySQL
7 条回复
zzNucker
2014-01-29 14:43:19 +08:00
你需要一个outer join, 把employee表放左边
haiyang416
2014-01-29 14:44:55 +08:00
你这个语句查询的是有亲属的男性员工,你可以用 LEFT JOIN 来重写这个查询。
saihuang
2014-01-29 14:51:34 +08:00
left join就可以了吧,这样没有相关亲属的男员工Relationship是null

select xxxx from e left join d on (e.ssn = d.essn) where e.sex = 'M';

http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins
msg7086
2014-01-29 14:59:20 +08:00
@saihuang 嗯这样没错。

要让一张表完全输出,而让另一张表包含进来,用的就是外连接。
完全输出的表在左,那就是左外链 LEFT (OUTER) JOIN。
SharkIng
2014-01-29 15:04:54 +08:00
@zzNucker
@haiyang416
@saihuang
非常感谢,可以了,感谢已送

另外追问一句,如果在亲属关系中有多个亲属,我用echo的时候输出是多条
例如
蒋先生有两个子女一个老婆,输出是三条单独的
蒋先生,123456789, 蒋小玲 女儿
蒋先生,123456789, 蒋小伟 儿子
蒋先生, 123456789, 周薇 老婆

有没有可能输出时候将同样一个员工的所有亲属通过一条输出?
msg7086
2014-01-29 15:08:40 +08:00
@SharkIng 如果你打算在MySQL这层做的话

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

不过其实不太推荐就是了。
dntc
2014-01-30 13:54:31 +08:00
GROUP_CONCAT 配合 GROUP BY 可以满足你的要求,把所有亲属连接成一个字符串附加到员工属性中

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/98641

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX