› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
SharkIng
V2EX  ›  MySQL

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

  •  
  •   SharkIng ·
    SharkIng · Jan 29, 2014 · 4867 views
    This topic created in 4621 days ago, the information mentioned may be changed or developed.
    现在假设有两个表,一个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,输出就完全乱了

    这种情况正确的应该是怎么做的??
    7 replies  •  1970-01-01 08:00:00 +08:00
    zzNucker
        1
    zzNucker  
       Jan 29, 2014   ❤️ 1
    你需要一个outer join, 把employee表放左边
    haiyang416
        2
    haiyang416  
       Jan 29, 2014   ❤️ 1
    你这个语句查询的是有亲属的男性员工,你可以用 LEFT JOIN 来重写这个查询。
    saihuang
        3
    saihuang  
       Jan 29, 2014   ❤️ 1
    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
        4
    msg7086  
       Jan 29, 2014   ❤️ 1
    @saihuang 嗯这样没错。

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

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

    有没有可能输出时候将同样一个员工的所有亲属通过一条输出?
    msg7086
        6
    msg7086  
       Jan 29, 2014
    @SharkIng 如果你打算在MySQL这层做的话

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

    不过其实不太推荐就是了。
    dntc
        7
    dntc  
       Jan 30, 2014
    GROUP_CONCAT 配合 GROUP BY 可以满足你的要求,把所有亲属连接成一个字符串附加到员工属性中
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1025 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 23:14 · PVG 07:14 · LAX 16:14 · JFK 19:14
    ♥ Do have faith in what you're doing.