Inner Join in ON - PullRequest
       20

Inner Join in ON

2 голосов
/ 16 июня 2011

У меня есть запрос MySQL, который пытается получить все страницы, содержащие данные, такие как «слово%».У меня есть таблица «многие ко многим», которая называется Pages2Data.Похоже, что для этого мне нужно иметь внутреннее соединение, соединяющее Pages с таблицей Pages2Data, а затем другое внутреннее соединение, соединяющее Pages2Data с данными.

Следующее не сработало, потому что вложенное предложение SELECT можетвернуть более одного ряда.Я не уверен, как это исправить, хотя:

SELECT * FROM `Pages` 
   INNER JOIN `Pages2Data` ON 
      (`Pages2Data`.`DataID`=(SELECT `DataID` FROM `Data` WHERE `DataWord` LIKE 'word%'))
      AND `Pages`.`PageID`=`Pages2Data`.`PageID`;

Ответы [ 5 ]

2 голосов
/ 16 июня 2011
SELECT * FROM `Pages`     
INNER JOIN `Pages2Data`
   ON `Pages`.`PageID`=`Pages2Data`.`PageID`
INNER JOIN `Data` ON `Data`.`DataID`= `Pages2Data`.`DataID`
WHERE `DataWord` LIKE 'word%'; 
1 голос
/ 16 июня 2011

Сначала проблемы с вашим запросом:

  1. условие соединения должно быть рядом с предложением ON
  2. в самом внешнем запросе нет предложения WHERE

Фиксированный запрос:

SELECT * FROM `Pages` 
INNER JOIN `Pages2Data` ON `Pages`.`PageID`=`Pages2Data`.`PageID`
WHERE `Pages2Data`.`DataID`= (SELECT `DataID` FROM `Data` WHERE `DataWord` LIKE 'word%');

Альтернативный запрос:

SELECT `PG`.*
FROM `Pages` `PG`
INNER JOIN `Pages2Data` `PD` ON `PD`.`PageID` = `PG`.`PageID`
INNER JOIN `Data` `DA` ON `PD`.`DataID` = `DA`.`DataID`
WHERE `DA`.`DataWord` LIKE 'word%';
0 голосов
/ 16 июня 2011
SELECT *
FROM Pages
   INNER JOIN Pages2Data
      ON Pages.PageID = Pages2Data.PageID
   INNER JOIN Data
      ON Pages2Data.DataID = Data.DataID
WHERE DataWord LIKE 'word%'
0 голосов
/ 16 июня 2011

Вы можете отметить «Like» в предложении where.

SELECT * FROM 
           `Pages` 
INNER JOIN 
           `Pages2Data` ON  (`Pages`.`PageID`=`Pages2Data`.`PageID`)
WHERE
            `DataWord` LIKE 'word%'
0 голосов
/ 16 июня 2011

попробуйте

SELECT * FROM `Pages` p, `Pages2Data` p2d, `Data` d
WHERE p.`PageID` = p2d.`PageID`
AND p2d.`DataID` = d.`DataID`
AND `DataWord` LIKE 'word%'
...