php从3个表中选择

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

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

  1. idSite SiteName
  2. --------------------
  3. 1 AAA
  4. 2 BBB
  5. 3 CCC
  6. idPaper PaperName
  7. ------------------------
  8. 1 Paper1
  9. 2 Paper2
  10. 3 Paper3
  11. 4 Paper4
  12. idLinkTable idSite idPaper
  13. ----------------------------------
  14. 1 1 1
  15. 2 1 3
  16. 3 2 1

我想把所有的文件都拿出来 idPaper=1 , idPaper=3 为了 idSite=1 ; 同样适用于 idSite=2 ,需要所有的文件 idPaper=1 . 这是所需的输出:

  1. SiteName PaperName
  2. ------------------------
  3. AAA Paper2
  4. AAA Paper4
  5. BBB Paper2
  6. BBB Paper3
  7. BBB Paper4

我尝试过以下代码:

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

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

  1. SiteName PaperName
  2. ------------------------
  3. AAA Paper2
  4. AAA Paper3
  5. AAA Paper4
  6. AAA Paper1
  7. AAA Paper2
  8. AAA Paper4
  9. BBB Paper2
  10. BBB Paper3
  11. BBB Paper4
mccptt67

mccptt671#

你需要所有可能的组合 Site 以及 Paper 表,除了已存在于 linkTable . 使用交叉联接来获取所有可能的组合,而不存在则消除 linkTable . 请尝试以下操作:

  1. SELECT s.SiteName AS Site, p.PaperName AS Paper
  2. FROM site s
  3. CROSS JOIN paper p
  4. WHERE NOT EXISTS ( SELECT idLinkTable FROM linkTable
  5. WHERE linkTable.idSite = s.idSite
  6. AND linkTable.idPaper = p.idPaper
  7. )

相关问题