mysql查询的问题
我有以下疑问mysql查询的问题,mysql,sql,Mysql,Sql,我有以下疑问 SELECT `c`.`id` AS `confession_id`, `c`.`account_id` AS `confession_author_id`, `c`.`confession_text`, `c`.`anonymous`, `c`.`total_likes`, `c`.`total_comments`, `c`.`creation_date`, `a`.`username`, `col`.`name` AS `college`,
SELECT
`c`.`id` AS `confession_id`,
`c`.`account_id` AS `confession_author_id`,
`c`.`confession_text`,
`c`.`anonymous`,
`c`.`total_likes`,
`c`.`total_comments`,
`c`.`creation_date`,
`a`.`username`,
`col`.`name` AS `college`,
`col`.`avatar_url`,
`cll`.`deleted` AS `tacc_exists`
FROM
`confessions` AS `c`
LEFT JOIN `accounts` AS `a`
ON `a`.`id` = `c`.`account_id`
LEFT JOIN `colleges` AS `col`
ON `col`.`id` = `c`.`college_id`
LEFT JOIN `confession_likes_log` AS `cll`
ON `cll`.`confession_id` = `c`.`id`
AND `cll`.`account_id` = :taccd_user
AND `c`.`college_id` IN ('9')
ORDER BY `c`.`id` DESC
LIMIT 10
假设它根据提供的学院id从指定学院中选择条目
尽管出于某种原因,即使学院id不是指定的id,它也会选择条目。我在计算如何使用左连接执行and子句时遇到了问题,因此我可能没有正确设置查询的格式。这是您的
where
子句:
FROM `confessions` AS `c` LEFT JOIN
`colleges` AS `col`
ON `col`.`id` = `c`.`college_id` LEFT JOIN
`confession_likes_log` AS `cll`
ON `cll`.`confession_id` = `c`.`id` AND
`cll`.`account_id` = :taccd_user AND
`c`.`college_id` in ('9')
left join
的工作方式是:在on
子句中运行测试。如果第一个表中的给定行不匹配,则包含右表中具有NULL
值的行。猜猜看。这甚至适用于第一个表中的条件
因此,('9')中的过滤器c.college\u id没有按照您的想法进行操作。您需要将其移动到
where`子句:
FROM `confessions` AS `c` LEFT JOIN
`colleges` AS `col`
ON `col`.`id` = `c`.`college_id` LEFT JOIN
`confession_likes_log` AS `cll`
ON `cll`.`confession_id` = `c`.`id` AND
`cll`.`account_id` = :taccd_user
WHERE `c`.`college_id` in ('9')
FROM `confessions` AS `c` LEFT JOIN
`colleges` AS `col`
ON `col`.`id` = `c`.`college_id` LEFT JOIN
`confession_likes_log` AS `cll`
ON `cll`.`confession_id` = `c`.`id` AND
`cll`.`account_id` = :taccd_user
WHERE `c`.`college_id` in ('9')