我有一个MySQL查询试图获取包含像'word%'之类的数据的所有页面。我有一个名为Pages2Data的多对多表。看起来,要做到这一点,我需要一个内部连接,将Pages连接到Pages2Data表,然后是另一个将Pages2Data连接到Data的内部连接。内部加入ON子句
以下方法无效,因为嵌套的SELECT子句可以返回多行。我不知道如何解决,虽然它:
SELECT * FROM `Pages`
INNER JOIN `Pages2Data` ON
(`Pages2Data`.`DataID`=(SELECT `DataID` FROM `Data` WHERE `DataWord` LIKE 'word%'))
AND `Pages`.`PageID`=`Pages2Data`.`PageID`;
这样做有没有优势,而不是没有内部连接的JellyBelly方法? – carlbenson 2011-06-16 13:26:56
隐式连接对于维护不利(等到需要将左侧jon添加到另一个表并查看我的意思),并且更可能出现错误,例如意外交叉连接。几乎20年前它们被更好的语法所取代,没有任何情况(除了支持一个旧的数据库,它没有语法),我想我会支持它们在新代码中使用的位置。从何处分离这个连接也使得它在未来变得更加清晰。 – HLGEM 2011-06-16 13:31:30
有趣......我很感谢解释!最后一个问题:在你的查询中,哪个子句首先被调用? Where子句或内部连接? – carlbenson 2011-06-16 13:39:46