【问题标题】:SQL SELECT from multiple tables从多个表中进行 SQL SELECT
【发布时间】:2010-11-27 19:27:03
【问题描述】:

如何从客户 1 和客户 2 获取所有产品,包括他们的客户名称?

customer1 table
cid name1
1   john
2   joe

customer2 table
cid name2
p1  sandy
p2  linda

product table
pid cid pname
1   1   phone
2   2   pencil
3   p1  pen
4   p2  paper

结果应该是这样的

pid  cid  pname  name1 name2
1    1    phone  john  NULL
2    2    pencil joe   NULL
3    p1   pen    NULL  sandy
4    p2   paper  NULL  linda

【问题讨论】:

    标签: sql select join left-join outer-join


    【解决方案1】:
    SELECT `product`.*, `customer1`.`name1`, `customer2`.`name2`
    FROM `product`
    LEFT JOIN `customer1` ON `product`.`cid` = `customer1`.`cid`
    LEFT JOIN `customer2` ON `product`.`cid` = `customer2`.`cid`
    

    【讨论】:

      【解决方案2】:
      SELECT pid, cid, pname, name1, name2 
      FROM customer1 c1, product p 
      WHERE p.cid=c1.cid 
      UNION SELECT pid, cid, pname, name1, name2 
      FROM customer2 c2, product p 
      WHERE p.cid=c2.cid;
      

      【讨论】:

      • name2 是该联合前半部分的未知列(后半部分是 name1)
      • CUSTOMER 表中没有 name2 列 - 您需要重新排列客户名称列,换成 null 以匹配所需的输出。完成后,您确实提供了我们大多数人提出的 LEFT JOIN 的替代方案。
      • @rexem 在 customer2 表中有
      【解决方案3】:
      select p.pid, p.cid, c1.name,c2.name
      from product p
      left outer join customer1 c1 on c1.cid=p.cid
      left outer join customer2 c2 on c2.cid=p.cid
      

      【讨论】:

        【解决方案4】:
        SELECT p.pid, p.cid, p.pname, c1.name1, c2.name2
        FROM product p
        LEFT JOIN customer1 c1 ON p.cid = c1.cid
        LEFT JOIN customer2 c2 ON p.cid = c2.cid
        

        【讨论】:

        • 声明 p 是第二行的产品表。 “来自产品 p”
        【解决方案5】:
        SELECT p.pid, p.cid, p.pname, c1.name1, c2.name2
        FROM product AS p
            LEFT JOIN customer1 AS c1
                ON p.cid = c1.cid
            LEFT JOIN customer2 AS c2
                ON p.cid = c2.cid
        

        【讨论】:

          【解决方案6】:
          SELECT 
            pid, 
            cid, 
            pname, 
            name1, 
            null 
          FROM 
            product p
          INNER JOIN 
            customer1 c ON p.cid = c.cid
          UNION
          SELECT 
            pid, 
            cid, 
            pname, 
            null, 
            name2
          FROM 
            product p
          INNER JOIN 
            customer2 c ON p.cid = c.cid
          

          【讨论】:

            【解决方案7】:

            我想我已经从 7 个表中加入了这样的人

            SELECT a.no_surat , 
            a.nm_anggota , 
            a.nrp_nip_anggota , 
            a.tmpt_lahir , 
            a.tgl_lahir , 
            a.bln_lahir , 
            a.thn_lahir , 
            a.alamat , 
            a.keperluan , 
            a.nm_jabatan , 
            b.id_polsek ,b.nm_polsek, 
            c.id_polres ,c.nm_polres , 
            d.id_pangkat , d.nm_pangkat, 
            e.id_pejabat , e.nm_pejabat , 
            f.id_ket , f.nm_ket, 
            g.id_pejabat,g.nm_pejabat 
            FROM tbl_skhp AS a 
            LEFT JOIN tbl_polsek AS b ON a.id_polsek=b.id_polsek 
            LEFT JOIN tbl_polres AS c ON a.id_polres=c.id_polres 
            LEFT JOIN tbl_pangkat AS d ON a.id_pangkat=d.id_pangkat
            LEFT JOIN tbl_pejabat AS e ON a.id_pejabat=e.id_pejabat
            LEFT JOIN tbl_ket AS f ON a.id_ket=f.id_ket 
            LEFT JOIN tbl_pejabat AS g ON a.id_pejabat=g.id_pejabat
            

            我希望你明白.... 我只是为我分享工作代码....我用它来获取数据到我的只读表单中,只是为了 priview...

            【讨论】:

            • 问题已经回答,此回答不涉及问题。
            • 这个答案让追随者/答案寻求者感到困惑。如果您能回答确切的问题,那就太好了
            猜你喜欢
            • 2011-08-27
            • 2010-10-27
            • 2015-02-21
            • 2021-03-27
            • 2015-03-07
            • 2021-04-16
            • 2014-08-04
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多