【问题标题】:Common results of two MySQL queries两个 MySQL 查询的常见结果
【发布时间】:2017-03-30 20:29:20
【问题描述】:

我希望合并两个 MySQL 查询,以便返回共同的结果,所以我知道我不想在这个查询上使用 UNION。我尝试编写一个子选择语句,但没有成功

第一个查询:

SELECT s.ses_id, h.page, m.question, m.answer FROM session s
INNER JOIN history h on h.ses_id = s.ses_id
INNER JOIN multiple m on m.ses_id = s.ses_id    
WHERE m.question = 4 and m.answer = 3 and h.page = 4

第二次查询:

SELECT s.ses_id, h.page, m.question, m.answer FROM session s
INNER JOIN history h on h.ses_id = s.ses_id
INNER JOIN multiple m on m.ses_id = s.ses_id    
WHERE m.question = 114 and m.answer = 1 and h.page = 114

合并查询失败:

SELECT s.ses_id FROM session s, multiple, history h
JOIN (
    SELECT session.ses_id
    FROM session, history, multiple
    WHERE multiple.question = 114 and multiple.answer = 1 and history.page = 114 and history.ses_id = session.ses_id and multiple.ses_id=session.ses_id
    ) q1 ON q1.ses_id = s.ses_id
WHERE s.interview = 'lifestyle' and s.finished = 'y' and multiple.page=4 and multiple.answer = 3 and h.page = 4 and h.ses_id = s.ses_id and multiple.ses_id=s.ses_id

多表包含问题和答案,我正在寻找那些用这些特定答案回答了这两个问题的人的 ID。

我意识到这应该很容易,但我很可能想多了和/或遗漏了一些东西。

【问题讨论】:

    标签: mysql sql join inner-join


    【解决方案1】:

    您只需将historymultiple 表分别加入第二个问题/答案组合的时间。

    SELECT s.ses_id,
           m1.question, m1.answer, h1.page,
           m2.question, m2.answer, h2.page
    FROM session s
    INNER JOIN history h1
       ON h1.ses_id = s.ses_id AND h1.page = 4
    INNER JOIN multiple m1
       ON m1.ses_id = s.ses_id
       AND m1.question = 4 AND m1.answer = 3
    INNER JOIN history h2
       ON h2.ses_id = s.ses_id AND h2.page = 114
    INNER JOIN multiple m2
       ON m2.ses_id = s.ses_id
       AND m2.question = 114 and m2.answer = 1
    WHERE s.interview = 'lifestyle' and s.finished = 'y'
    

    【讨论】:

    • 谢谢!这解决了我想要完成的任务。
    【解决方案2】:

    下面简单修改的​​查询可能有用。,

    SELECT s.ses_id, h.page, m.question, m.answer FROM session s
    INNER JOIN history h on h.ses_id = s.ses_id
    INNER JOIN multiple m on m.ses_id = s.ses_id    
    WHERE 
    ( m.question = 4 and m.answer = 3 and h.page = 4 )
    OR
    ( m.question = 114 and m.answer = 1 and h.page = 114 )
    

    不需要合并操作。

    【讨论】:

    • 我不这么认为。 OP 正在查找已回答两个问题而不是其中一个问题的用户记录。
    • 这将返回两个集合的结合,而不是它们的交集
    • 是的,我同意它在一种情况下失败
    【解决方案3】:

    如果您正在寻找两个查询的交集,那么您可以简单地使用 mysql 的IN set 运算符

    SELECT s.ses_id, h.page, m.question, m.answer
    FROM session s
       INNER JOIN history h on h.ses_id = s.ses_id
       INNER JOIN multiple m on m.ses_id = s.ses_id    
    WHERE m.question = 4 and m.answer = 3 and h.page = 4 and s.ses_id 
    IN
    (
       SELECT s.ses_id
       FROM session s
          INNER JOIN history h on h.ses_id = s.ses_id
          INNER JOIN multiple m on m.ses_id = s.ses_id    
       WHERE m.question = 114 and m.answer = 1 and h.page = 114
    )
    

    【讨论】:

      猜你喜欢
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      • 2013-06-01
      • 2017-04-05
      • 2012-03-08
      相关资源
      最近更新 更多