php从3个表中选择

11dmarpk  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(351)

我有3个数据库表: site , paper 以及 linkTable .

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

我想把所有的文件都拿出来 idPaper=1 , idPaper=3 为了 idSite=1 ; 同样适用于 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
mccptt67

mccptt671#

你需要所有可能的组合 Site 以及 Paper 表,除了已存在于 linkTable . 使用交叉联接来获取所有可能的组合,而不存在则消除 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
                 )

相关问题