【发布时间】:2020-10-13 03:38:17
【问题描述】:
这是我在 Stackoverflow 上的第一篇文章,如果我的问题格式不正确,我深表歉意。我用我的头撞墙,我确信这是一个简单的问题。我有一张包含一堆事件信息的表格,大约有 10 列:
表:event_info
date location_id lead_user_id colead_user_id attendees start end <and a few more...>
------------------------------------------------------------------------------------------------
2020-10-10 1 3 1 26 2100 2200 .
2020-10-11 3 2 4 18 0600 0700
2020-10-12 2 5 6 6 0800 0900
还有一张包含用户信息的表格:
表:用户
user_id user_name display_name email phone city
----------------------------------------------------------------------
1 Joe S goofball ...
2 John T schmoofball ...
3 Jack U aloofball ...
4 Jim V poofball ...
5 Joy W tootball ...
6 George A boring ...
我想创建一个只包含信息子集的视图,而不是完整的表连接。事件表lead_user_id 和colead_user_id 列都引用users 表中的user_id 列。
我想创建一个这样的视图:
date Location Lead Name CoLead Name attendees
---------------------------------------------------------------------
2020-10-10 1 Jack U Joe S 26
2020-10-11 3 John T Jim V 18
2020-10-12 2 Joy W George A 6
我已经尝试了以下和几次类似的迭代都无济于事......
SELECT
E.date, E.location,
U1.display_name AS Lead Name,
U2.display_name AS CoLead Name.
E.attendees
FROM
users U1, event_info E
INNER JOIN
event_info E ON U1.user_id = E.lead_user_id
INNER JOIN
users U2 ON U2.user_id = E.colead_user_id
我得到了可怕的
您的 SQL 语法有错误
消息。我并不感到惊讶,因为我真的只在单列或嵌套选择语句上使用过连接......这两个指向一个的列让我陷入循环。救命!
【问题讨论】:
-
请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出尽可能少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)的 SQL,并以表格式作为代码输入。 How to Ask 暂停整体目标的工作,将代码砍到第一个表达式,没有给出你期望的内容,说出你的期望和原因。
-
PS 你有一个语法错误。阅读语法和手册。显示组成子表达式是可以的。当确定这将是一个常见问题解答。请在考虑发布之前阅读您的教科书和/或手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有和没有您的特定字符串/名称和站点:stackoverflow.com 和标签;阅读许多答案。反映你的研究。请参阅How to Ask 和投票箭头鼠标悬停文本。如果您发布问题,请使用一个措辞作为标题。
-
你使用同一个别名两次,例如
-
Mixing implicit and explicit JOINs 的可能重复逗号表示交叉连接,但优先级低于关键字 JOIN。因此,首先完成 JOIN ON 并且在那里不知道逗号的左表。所以不要将逗号与关键字连接混合使用。 (如果你砍掉你的代码,你会得到 select * from u1 ,ea join eb on c。现在看看重复的标题。)
-
Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI
JOIN语法-92 SQL 标准(25 多年前),不鼓励使用。并且混合这两种样式 - 在逗号分隔的FROM中有两个表格,而两个更合适的JOINs - 真的 是一种非常糟糕的做法!跨度>