簡體   English   中英

如何從兩個具有不同值的單獨數據表中查詢兩個

[英]How to query two from two seperate datatables with different values

我將如何查詢以下內容?

User.name and Groups.description, 
from the User table and Groups table, 
where User.id_user = User_Group.id_user, and Groups.id_groups = User_Group.id_groups 

我了解了UNIONJoin ,但是UNION要求表具有相同數量的列,而JOIN似乎僅適用於2個表? 是否可以結合UNIONJoin

SELECT User.Name
FROM User
FULL JOIN User_Groups
ON User.Id_user= User_Groups.Id_user
UNION
SELECT Group.Description
FROM Group
FULL JOIN User_Groups
ON Group.Id_group= Groups.Id_group

上面的代碼正確嗎?

試試這個簡化的查詢:

SELECT u.Name
FROM   User u
JOIN   User_Groups USING (Id_user)

UNION  ALL
SELECT g.Description
FROM   Group g
JOIN   User_Groups USING (Id_group)
  • 使用UNION ALL而不是UNION ,因為UNION會消除具有相同值的任何行。

  • 一個UNION的結果只有一個標題,列名取自查詢中的第一個SELECT 因此,在您的情況下,列名稱將為“名稱”。

  • 當連接列共享相同的名稱並且僅在連接的左側和右側出現一次時, USING只是ON的語法簡化。

  • 表別名User AS u或只是User u簡化了代碼中的后續引用。

  • 您可以根據需要JOIN任意多個表,但不限於兩個表。 我懷疑,您真正想要的是:

SELECT u.Name, g.Description
FROM   User u
JOIN   User_Groups USING (Id_user)
JOIN   Group g USING (Id_group)
  • 但是MySQL中沒有FULL [OUTER] JOIN 其他的RDBMS都有,例如PostgreSQL。 在這里閱讀
    我懷疑,這不是您要開始使用的內容,而是將其替換為簡單的[INNER] JOIN 在此處閱讀更多手冊

我認為也可以嘗試加入。

SELECT u.name, g.description FROM User u, Groups g, User_Group ug, Groups.id gi 
WHERE u.id_user=g.id_user and g.id_groups=ug.id_groups;

嘗試:

SELECT User.Name, Groups.Description
FROM User
JOIN User_Group on User.id_user = User_Group.id_user
JOIN Groups on Groups.id_groups = User_Group.id_groups

要么

SELECT User.Name, Groups.Description
FROM User
JOIN User_Group USING (id_user)
JOIN Groups USING (id_groups)

不確定為什么要使用該union嗎? (除非您想要1列-您未指定)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM