【问题标题】:PHP select from 3 tablesPHP 从 3 个表中选择
【发布时间】:2019-02-09 14:23:33
【问题描述】:

我有 3 个数据库表:sitepaperlinkTable

 idSite     SiteName  
 --------------------
   1           AAA
   2           BBB
   3           CCC


idPaper     PaperName
------------------------
   1           Paper1
   2           Paper2
   3           Paper3
   4           Paper4


idLinkTable    idSite   idPaper
----------------------------------
     1           1         1
     2           1         3
     3           2         1

我想为idSite=1显示所有没有idPaper=1,idPaper=3的论文; 同样对于idSite=2,需要所有没有idPaper=1 的论文。这是所需的输出:

SiteName  PaperName
------------------------
   AAA         Paper2
   AAA         Paper4
   BBB         Paper2
   BBB         Paper3
   BBB         Paper4

我试过这段代码:

SELECT s.SiteName AS Site, p.PaperName AS Paper
 FROM site s 
INNER JOIN linkTable l ON s.idSite = l.idSite 
INNER JOIN paper p ON l.idPaper != p.idPaper;

这是我使用此代码时的结果:

SiteName  PaperName
------------------------
   AAA         Paper2
   AAA         Paper3
   AAA         Paper4
   AAA         Paper1
   AAA         Paper2
   AAA         Paper4
   BBB         Paper2
   BBB         Paper3
   BBB         Paper4

【问题讨论】:

标签: mysql select multiple-tables cross-join


【解决方案1】:

您需要SitePaper 表之间的所有可能组合,linkTable 中已经存在的组合除外。使用CROSS JOIN 获取所有可能的组合,使用NOT EXISTS 消除linkTable 中已经存在的结果。请尝试以下操作:

SELECT s.SiteName AS Site, p.PaperName AS Paper
FROM site s 
CROSS JOIN paper p 
WHERE NOT EXISTS ( SELECT idLinkTable FROM linkTable 
                   WHERE linkTable.idSite = s.idSite 
                     AND linkTable.idPaper = p.idPaper
                 )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多