[英]Complex Nested SQL Query
更新我将调试我的问题并重新发布更多详细信息! 对于造成的混乱,我深表歉意!
更新所有评论或发布答案的人,我会将您链接到我的重新发布,感谢您花时间检查我的问题和评论/答案!
我会让我的问题简单明了; 当我包含前三个子查询时,下面的代码块会生成语法错误。
我究竟做错了什么?
SELECT
parent1.parent1_id,
parent1.child1_id,
parent1.child2_id,
parent1.child3_id,
parent2.parent2_id,
parent2.child1_id,
parent2.child2_id,
parent2.child3_id
FROM
parent1
LEFT JOIN
( SELECT
child1.child1_id,
child1.child1_content
FROM
child1
WHERE
child1.child1_id = parent1.child1_id ) child1
( SELECT
child1_extras.child1_extrasID,
child1_extras.child1_extrasContent
FROM
child1_extras
WHERE
child1_extras.child1_id = child1.child1_id )
ON parent1.child1_id = child1.child1_id
LEFT JOIN child2
( SELECT
child2.child2_id,
child2.child2_content
FROM
child2
WHERE
child2.child2_id = parent1.child2_id )
( SELECT
child2_extras.child2_extrasID,
child2_extras.child2_extrasContent
FROM
child2_extras
WHERE
child2_extras.child2_id = child2.child2_id )
ON parent1.child2_id = child2.child2_id
LEFT JOIN child3
( SELECT
child3.child3_id,
child3.child3_content
FROM
child3
WHERE
child3.child3_id = parent1.child3_id )
( SELECT
child3_extras.child3_extrasID,
child3_extras.child3_extrasContent
FROM
( SELECT
comments.comment_id,
comments.comment
FROM
comments
WHERE
comments.child3_extrasID = child3_extras.child3_extrasID ) child3_extras
JOIN child3
ON child3_extras.child3_id = child3.child3_id )
ON parent1.child3_id = child3.child3_id
LEFT JOIN followers
ON parent1.user_id = followers.followed_id
AND parent1.parent1_timestamp > followers.follower_timestamp
AND parent1.parent1_id NOT IN ( SELECT removed.isub_rmv FROM removed )
AND parent1.parent1_hide = false
WHERE
followers.follower_id = {$_SESSION['info']}
{$portname_clause}
ORDER BY
parent1.parent1_timestamp DESC
LIMIT {$postnumbers}
OFFSET
{$offset}
提前谢谢了。
问题在于你的语法。 我重新格式化了您的查询,但不知道究竟指的是什么。 正如评论中所述,单独简化您的查询以了解它们是否有效,然后添加到链中的下一个。
需要澄清的最大示例是连接到其他表。 无论何时加入,您都会执行查询并为其分配别名引用。 别名是查询其余部分的基础。 不要将别名 WIHTIN 与外部查询的子选择混淆。 不做您的确切查询,请查看以下内容
SELECT
parent1.parent1_id, etc, etc, etc
FROM
parent1
LEFT JOIN
( SELECT
child1.child1_id,
child1.child1_content
FROM
child1
WHERE
child1.child1_id = parent1.child1_id ) CHILD1
小写的“child1” INNER 查询与上面示例的 OUTER 大写“CHILD1”不同。 我认为您想要获得的更多是以下内容。 另请注意,我正在应用 ALIASES 来帮助确认 ACTUAL 表名与任何可能是子查询条件之间的区别。
SELECT
P1.parent1_id,
C1.child1_content,
C1X.child1_extrasID,
C1X.child1_extrasContent
FROM
parent1 P1
LEFT JOIN child1 C1
on P1.child1_id = C1.child1_id
LEFT JOIN child1_extras C1X
on P1.child1_id = C1X.child1_id
请注意,每个附加表都是从一个可能的前一个表中连接起来的。 我还尝试始终让我的左侧表(查询中的第一个)加入或左加入到第二个别名结果键 ID。
尝试使用一些固定条件的上述简化示例查询,看看它是否有效。 然后应用您的额外表连接,位置,排序依据,偏移量等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.