PHP выбрать из 3 таблиц - PullRequest
       9

PHP выбрать из 3 таблиц

0 голосов
/ 04 сентября 2018

У меня есть 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

1 Ответ

0 голосов
/ 04 сентября 2018

Вам нужны все возможные комбинации между Site и Paper таблицами, кроме тех, которые уже существуют в 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
                 )
...