我不是一个很懂 SQL 的人,所以如果以前有人问过类似的问题,请原谅我。我什至不确定我需要搜索什么才能学习这一点。因为我只需要在我认为我可以合理询问时做这样的事情。
我正在编写我的第一个 Android 应用程序,它需要与在线数据库进行通信,并且已经成功编写了几个与我的应用程序配合良好的 SQL 查询,但是这个查询对于我的基础知识来说有点复杂。
下面我提供了一个我需要的示例,我认为任何至少具有 SQL 基本知识的人都可以理解。我想知道是否有任何好心人能够帮助解决一个问题,或者给我一些关于我需要做什么的见解。提前致谢!
伪样本:
SELECT *
FROM events
WHERE user_has_event.user_user_id = user.user_id AND user_has_event.attendance = 1 OR 2
JOIN attendance
这是我的表格的基本视觉效果(没有用户表格):
Event Table User_has_event Table
----------------------------------- ---------------------------------------
|event_id|event_name|event_society| |user_user_id|event_event_id|attendance|
----------------------------------- ---------------------------------------
| | | | | | | |
这是我想要的结果:
Outcome Table
----------------------------------------------
|event_id|event_name|event_society|attendance|
----------------------------------------------
| | | | |
最佳答案
由于您对 SQL 的了解很基础,因此我将对 Andy 的答案进行一些扩展(好吧,事实证明,相当多)。首先,t1
和 t2
不是必需的,但很方便。您可以直接引用表,如果字段名称是唯一的则不必这样做。你可以这样做:
SELECT
events.event_id,
events.event_name,
events.event_society,
user_has_event.attendance
FROM
events
INNER JOIN user_has_event ON events.event_id = user_has_event.event_event_id
如您所见,这是相当冗长乏味的。因此,当您第一次引用表格时,您可以像 Andy 所做的那样立即在其后面加上缩写,而且实际上这通常被认为是最佳实践。现在,您还可以这样做:
SELECT
event_id,
event_name,
event_society,
attendance
FROM
events
INNER JOIN user_has_event ON event_id = event_event_id
您可以摆脱这种情况,因为所有字段名称在 SELECT 语句访问的表中都是唯一的。由于这通常不是真的,所以这不是一个好主意,因为很容易错过不明确的引用。安迪的方法是最好的。现在,您可能不遗余力地使用不同的字段名称,因为您不知道可以使用 Table.Field 语法引用该表。使用相同的字段名称通常会更清晰;不同的人对此有不同的感受。我通常只使用“ID”作为每个表中的主键。这是可行的,因为您可以通过使用 Table.Field 引用字段来解决歧义。
这导致您会发现了解下一件很有帮助的事情,那就是您可以使用 AS 关键字将您想要的任何字段名称分配给输出。假设我将您的字段重命名为:
Event
ID
Name
Society
UserEvent
ID
EventID
Attendance
现在,看看这个:
SELECT
e.ID AS 'Event ID',
e.Name AS 'Event Name',
e.Society AS 'Event Society',
ue.Attendance
FROM
Events e
INNER JOIN UserEvent ue ON e.ID = ue.EventID
现在,您已将所选字段的名称与结果中的字段名称解耦,这应该可以避免您以后的麻烦。一个重要的原则是,存储数据的方式和格式化数据输出的方式应该是松散耦合的。您不希望考虑输出数据的外观来决定应如何命名字段,因此您需要了解这些内容。
现在,假设您还有一个 User 表(您可能有)。假设它看起来像这样(可能不是):
User
ID
FirstName
LastName
OtherStuff
现在,我们将修改 UserEvent 表,以包含 User 表的外键:
UserEvent
ID
EventID
UserID
Attendance
现在,看看这个:
SELECT
e.Name AS 'Event Name',
e.Society AS 'Event Society',
u.LastName + ', ' + u.FirstName AS 'User Name',
ue.Attendance
FROM
Events e
JOIN UserEvent ue ON e.ID = ue.EventID
JOIN User u ON u.ID = ue.UserID
这应该为您提供除 WHERE 子句之外的基础知识,您可以自己掌握这些基础知识(也可以随意询问有关 WHERE 子句的问题)。
旁注:JOIN 与 INNER JOIN 相同,后者是最常见的连接类型,表示两个集合的交集。还有 LEFT、RIGHT 和(有时)OUTER 连接。我一般只说 JOIN 而不是 INNER JOIN;同样,不同的人对此有不同的感受。一致性是这里最重要的原则。
关于mysql - 帮助我的 JAVA 应用程序进行 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36296909/