【问题标题】:check multiple conditions on join query - pgsql检查连接查询的多个条件 - pgsql
【发布时间】:2022-01-18 14:49:05
【问题描述】:

如果删除部分AND course.publish="true",下面给出的查询将给出结果。但我想检查此连接查询的两个条件,即course 表的deleted_at 列具有null 值和publish course 表的列有值true。我该如何解决这个问题?

DB::select('SELECT users.id as user_id,users.name,course.id as course_id,
              course."courseDisplayName",course.created_at,
              subjects.id as subject_id,subjects.subject
               FROM users 
               INNER JOIN course ON course."userId"=users.id AND course.deleted_at is null AND course.publish="true"
               INNER JOIN subjects ON course."subjectId"= subjects.id');

WHERE course.deleted_at is null AND course.publish 添加时出错:

"message": "SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near \"INNER\"\nLINE 16: INNER JOIN subjects ON course.\"subjectId\"= subjects.id....\n ^ (SQL: SELECT users.id as user_id,\r\n users.name,\r\n course.id as course_id,\r\n course.\"courseDisplayName\",\r\n course.deleted_at,\r\n subjects.id as subject_id,\r\n subjects.subject\r\n FROM users \r\n INNER JOIN course ON course.\"userId\"=users.id WHERE course.deleted_at is null AND course.publish\r\n INNER JOIN subjects ON course.\"subjectId\"= subjects.id)",

【问题讨论】:

  • 不确定,但我认为 postgres 可以将此作为条件处理 ``` INNER JOIN course ON course."userId"=users.id AND course.deleted_at 为 null AND course.publish) ```
  • 它正在工作。谢谢

标签: php sql postgresql join sql-view


【解决方案1】:

AND course.publish="true" 如果是布尔类型,则应替换为AND course.publish

AND course.deleted_at is null AND course.publish 应该是连接表的WHERE 子句而不是ON 子句的一部分,因为它们不参与连接条件。

SELECT users.id as user_id,users.name,course.id as course_id,
       course."courseDisplayName",course.created_at,
       subjects.id as subject_id,subjects.subject
 FROM users 
INNER JOIN course 
   ON course."userId"=users.id
INNER JOIN subjects 
   ON course."subjectId"= subjects.id
WHERE course.deleted_at is null 
  AND course.publish

【讨论】:

  • 查看更新问题正文。我已经添加了我在关注你的答案时遇到的错误
  • 看看我的回答,WHERE 子句总是在 FROM 子句之后,它包括所有连接的表和相关的 ON 子句。
猜你喜欢
  • 2021-09-18
  • 1970-01-01
  • 2017-08-06
  • 2017-10-20
  • 1970-01-01
  • 2012-11-15
  • 2016-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多