如何获取与值匹配或存在于另一个表中的记录?

时间:2019-08-25 22:33:21

标签: mysql sql node.js database

在这种情况下,我试图弄清楚如何获得所有任务,即两个字段等于某个值或它们存在于另一个表中?

以下是查询:

SELECT TASKS.task_id, TASKS.task_title, TASKS.task_description, TASKS.task_assigned_name, TASKS.task_assigned_phone_number, TASKS.task_due_date_time, TASKS.task_category
FROM TASKS
WHERE TASKS.task_complete = 1 AND 
      (TASKS.task_creator_id = ? OR 
       TASKS.task_assigned_user_id = ? OR
       WHERE EXISTS (SELECT  WATCHERS.task_id
                     FROM WATCHERS
                     WHERE WATCHERS.task_id = TASK.task_id AND
                           WATCHERS.watcher_user_id = ?
                    )
     );

即使我期望数据库结果也不会返回任何内容。

3 个答案:

答案 0 :(得分:0)

您的语法似乎有误。您有太多WHERE

   SELECT t.task_id, t.task_title, t.task_description, t.task_assigned_name, t.task_assigned_phone_number, t.task_due_date_time, t.task_category
    FROM TASKS t
    WHERE t.task_complete = 1 AND 
          (t.task_creator_id = ? OR 
           t.task_assigned_user_id = ? OR
           EXISTS (SELECT 1  -- the return value is immaterial
                   FROM WATCHERS w
                   WHERE w.task_id = t.task_id AND
                         w.watcher_user_id = ?
                  )
         );

WHERE之前的EXISTS是不合适的。

您的查询应该返回错误。确保检查错误!

答案 1 :(得分:0)

您是否尝试过使用联接?

SELECT TASKS.task_id, 
       TASKS.task_title, 
       TASKS.task_description, 
       TASKS.task_assigned_name, 
       TASKS.task_assigned_phone_number, 
       TASKS.task_due_date_time, 
       TASKS.task_category
FROM TASKS
JOIN WATCHERS on WATCHERS.task_id = TASK.task_id
WHERE TASKS.task_complete = 1 AND 
  (TASKS.task_creator_id = ? OR 
   TASKS.task_assigned_user_id = ? OR
   WATCHERS.watcher_user_id = ?);

我不确定这是否是您要寻找的逻辑。

在查询中的多余位置之外,看起来您可能有一个多余的右括号。

答案 2 :(得分:0)

此sql与您在重复的帖子中发布的具有示例数据和结果的结果集匹配:

SELECT t.task_id, t.task_complete, t.task_creator_id, t.task_assigned_user_Id
FROM tasks t
WHERE t.task_complete = 1 AND
      (
      t.task_creator_id = 8
      OR t.task_assigned_user_id = 8
      OR EXISTS
          (
          SELECT w.task_id
          FROM watchers w
          WHERE w.task_id = t.task_id
          AND w.watcher_user_id = 8
          )
      )