gpt4 book ai didi

MySQL JOIN 问题

转载 作者:行者123 更新时间:2023-11-29 14:57:10 24 4
gpt4 key购买 nike

解决方案:如果有人感兴趣:

SELECT login_id, hotel_name, AVG( q1 ) AS q1, AVG( q2 ) AS q2, AVG( q3 ) AS q3, AVG( q4 ) AS q4, AVG( q5 ) AS q5, AVG( q6 ) AS q6, AVG( q7 ) AS q7, AVG( q8 ) AS q8, AVG( q9 ) AS q9, AVG( q10 ) AS q10, AVG( q11 ) AS q11, AVG( q12 ) AS q12, AVG( q13 ) AS q13, AVG( q14 ) AS q14, AVG( q15 ) AS q15, AVG( q16 ) AS q16, AVG( q17 ) AS q17, AVG( q18 ) AS q18, AVG( q19 ) AS q19, AVG( q20 ) AS q20, AVG( q21 ) AS q21, AVG( q22 ) AS q22
FROM thotels_respondents
LEFT JOIN thotels_results ON thotels_respondents.login_id = thotels_results.company
AND q24 =5
AND thotels_results.date = 'NOV2010'
AND thotels_results.brand = 'XYZ'
WHERE
AND login_id = '66j8ttk2'
GROUP BY login_id

通过将 thotels_results.date 和 .brand 移至 WHERE 子句之前解决了该问题。

大家早上好,

希望有人能够提供帮助 - 我怀疑我错过了一些完全明显的事情......

我在 MySQL 中有两个表 hotel_respondentshotel_results - 它们由 hotel_respondents.login_id = hotel_results.company 连接起来

我在 hotel_results 表中有以下数据:

date       brand code      q1  q2  q3  q4  q5  q6  q7  q8  q9  q10 q11 q12 q13 q14 q15 q16 q17 q18 q19 q20 q21 q22 q23 q24 q25

NOV2010 XYZ 66j8ttk2 8 6 4 8 3 8 8 8 7 4 8 7 7 4 7 6 6 7 4 5 7 7 2 1 1
NOV2010 XYZ 66j8ttk2 9 9 5 5 5 5 3 3 9 9 9 5 6 8 6 8 8 5 5 5 6 6 2 1 1
NOV2010 XYZ 66j8ttk2 10 10 7 10 8 10 10 9 8 10 10 10 8 10 10 10 10 10 10 10 10 10 1 1 1
NOV2010 XYZ 66j8ttk2 8 6 4 8 3 8 8 8 7 4 8 7 7 4 7 6 6 7 4 5 7 7 2 1 1
NOV2010 XYZ 66j8ttk2 9 10 9 9 7 10 10 10 9 9 9 10 10 8 10 9 10 10 10 10 10 7 1 1 1
NOV2010 XYZ 66j8ttk2 10 10 10 6 10 10 10 10 6 10 10 10 10 1 10 10 10 10 10 10 10 10 1 2 1
NOV2010 XYZ 66j8ttk2 10 7 6 9 7 9 8 8 8 6 8 7 10 5 9 8 8 8 7 9 8 8 1 2 1
NOV2010 XYZ 66j8ttk2 8 8 7 7 9 9 10 1 8 10 10 9 8 8 9 8 8 7 8 8 8 9 1 2 1
NOV2010 XYZ 66j8ttk2 6 6 5 7 7 5 7 6 5 3 7 4 5 8 5 7 8 7 5 4 7 3 2 2 1
NOV2010 XYZ 66j8ttk2 10 9 10 9 10 10 8 10 9 10 10 9 9 6 9 9 9 10 9 9 9 8 2 3 2
NOV2010 XYZ 66j8ttk2 5 9 2 6 2 2 10 10 6 2 10 2 2 2 5 5 5 10 5 2 8 8 2 4 1
NOV2010 XYZ 66j8ttk2 9 8 5 7 7 9 9 9 10 10 9 7 9 6 8 8 7 8 9 10 7 10 2 4 1

现在,在 Excel 中,我对每个问题运行 AVERAGE,其中 q24 = 1 并返回以下结果。

q1      q2      q3      q4      q5      q6      q7      q8      q9      q10     q11     q12     q13     q14     q15     q16     q17     q18     q19     q20     q21     q22         
8.80 8.20 5.80 8.00 5.20 8.20 7.80 7.60 8.00 7.20 8.80 7.80 7.60 6.80 8.00 7.80 8.00 7.80 6.60 7.00 8.00 7.40

不,我可以使用以下代码在 MySQL 中复制结果:

SELECT login_id, hotel_name, AVG (q1) AS q1, AVG (q2) AS q2, AVG (q3) AS q3, AVG (q4) AS q4, AVG (q5) AS q5, AVG (q6) AS q6, AVG (q7) AS q7, AVG (q8) AS q8, AVG (q9) AS q9, AVG (q10) AS q10, AVG (q11) AS q11, AVG (q12) AS q12, AVG (q13) AS q13, AVG (q14) AS q14, AVG (q15) AS q15, AVG (q16) AS q16, AVG (q17) AS q17, AVG (q18) AS q18, AVG (q19) AS q19, AVG (q20) AS q20, AVG (q21) AS q21, AVG (q22) AS q22 FROM thotels_respondents LEFT JOIN thotels_results ON thotels_respondents.login_id = thotels_results.company AND q24 = 1 WHERE thotels_results.brand = 'XYZ' AND thotels_results.date = 'NOV2010' AND login_id = '66j8ttk2' GROUP BY hotel_name;

我遇到的问题如下 - 只要 q24 在表中具有 1,2,3,4,5 中的任何一个,代码就会在 MySQL 中返回正确的结果集。然而,正如您从上面的数据中看到的 - 对于 q24 来说,没有 5。

因此,当您运行以下代码时:

SELECT login_id, hotel_name, AVG (q1) AS q1, AVG (q2) AS q2, AVG (q3) AS q3, AVG (q4) AS q4, AVG (q5) AS q5, AVG (q6) AS q6, AVG (q7) AS q7, AVG (q8) AS q8, AVG (q9) AS q9, AVG (q10) AS q10, AVG (q11) AS q11, AVG (q12) AS q12, AVG (q13) AS q13, AVG (q14) AS q14, AVG (q15) AS q15, AVG (q16) AS q16, AVG (q17) AS q17, AVG (q18) AS q18, AVG (q19) AS q19, AVG (q20) AS q20, AVG (q21) AS q21, AVG (q22) AS q22 FROM thotels_respondents LEFT JOIN thotels_results ON thotels_respondents.login_id = thotels_results.company AND q24 = 5 WHERE thotels_results.brand = 'XYZ' AND thotels_results.date = 'NOV2010' AND login_id = '66j8ttk2' GROUP BY hotel_name;

它不返回任何数据,仅返回此消息:

MySQL returned an empty result set (i.e. zero rows). (Query took 0.2381 sec)

为了让我的代码和页面正常工作,我需要的是当 q24 没有 1 到 5 的响应时实际带回一系列 NULL - 像这样

login_id    hotel_name  q1  q2  q3  q4  q5  q6  q7  q8  q9  q10 q11 q12 q13 q14 q15 q16 q17 q18 q19 q20 q21 q22
66j8ttk2 bbcircus NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL

我尝试修改代码来执行此操作,但当我这样做时,我最终搞乱了计算 - 我确信我在 JOIN 上做错了什么,但无法弄清楚我在哪里我出错了。

非常感谢您的帮助!!!

提前致谢,

荷马。

最佳答案

所以你解决了它,但你没有包含解释 - 这是为了完整性。

所提供的两个查询之间的区别在于,一个查询在特定条件下进行 LEFT JOIN,而另一个查询则进行 LEFT JOIN,然后将条件应用于结果。

嗯,含义是不同的 - 如果您首先 LEFT JOIN,然后应用 where 条件,该条件将条件应用于 LEFT JOIN 右侧表中的列,那么它将修剪右侧缺失的所有行。这是因为,当 thotels_reults.date IS NULL 时,条件 thotels_results.date = 'NOV2010' 不成立。

但是,如果条件应用于 LEFT JOIN,那么它不为真也没关系 - LEFT JOIN 的定义是 - 对于连接条件为 FALSE 的行,返回包含 NULL 的行。

因此结果集不同 - 由于条件以不同的方式应用。

如果您想获得与 WHERE 相同的结果,则必须将每个条件(例如 thotels_results.date = 'NOV2010')替换为 thotels_results.date = 'NOV2010' OR thotels_results。 date IS NULL - 因为您不仅仅想要字段等于某个值的行,而是想要该字段为 NULL 的行。

关于MySQL JOIN 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4302292/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com