我正在嘗試創建一個包含用戶(一般)和另外兩個表的資料庫,即:男性/女性選擇。這將用于約會,更具體地說,女孩投票給男孩,男孩投票給女孩。如果他們的選擇是重疊的,這意味著他們適合在一起。
我不知道我是否很好地接近了這個話題,但到目前為止我已經構建了以下代碼:
USERS:
| ID (PRIMARY) | NAME | GENDER |
| 1 | Man1 | Male |
| 2 | Man2 | Male |
| 3 | Woman1 | Female |
| 4 | Woman2 | Female |
Woman_Result
| ID (PRIMARY) | ID_PERSON | ID_CHOOSE |
| 1 | 3 | 1 |
| 2 | 3 | 2 |
| 3 | 4 | 1 |
Man_Result
| ID (PRIMARY) | ID_PERSON | ID_CHOOSE |
| 1 | 1 | 4 |
| 2 | 2 | 1 |
所以那些人的比賽只有:Man1和Woman2
SELECT w.*, m.*
FROM Man_Result AS m
JOIN Woman_Result AS w
WHERE w.ID_CHOOSE = m.ID_PERSON AND m.ID_CHOOSE = w.ID_PERSON
輸出:
| ID | ID_PERSON | ID_CHOOSE | ID | ID_PERSON | ID_CHOOSE |
| 1 | 1 | 4 | 1 | 4 | 1 |
所以它可以作業,但是我如何將它連接到我的 USERS 表以獲得這些輸出:
NAME | NAME
Man1 | Woman2
我已經結合了這樣的東西,但我不完全知道如何結合它來使它作業:)
SELECT USERS.NAME
FROM USERS
INNER JOIN Woman_Result ON USERS.ID = Woman_Result.ID_PERSON
INNER JOIN Man_Result ON USERS.ID = Man_Result.ID_PERSON
- 編輯 -
如果我想為每個用戶添加“ID_CHOOSE2”、“ID_CHOOSE3”等,我必須創建什么樣的查詢才能使其正確?我嘗試使用“或”:
ON w.ID_CHOOSE OR w.ID_CHOOSE2 = m.ID_PERSON AND m.ID_CHOOSE OR m.ID_CHOOSE2 = w.ID_PERSON
和
ON (w.ID_CHOOSE = m.ID_PERSON AND m.ID_CHOOSE = w.ID_PERSON)
OR (w.ID_CHOOSE2 = m.ID_PERSON AND m.ID_CHOOSE2 = w.ID_PERSON)
但是第二個示例僅比較相同的列,我的觀點是,它像示例中一樣將每個列與一個人進行比較
我的代碼:https ://onecompiler.com/mysql/3xz4552uv
uj5u.com熱心網友回復:
好的,如果您決定在一個名為matches
id uid1 uid2
1 1 4
2 2 1
3 3 1
4 3 2
5 4 1
6 1 2
匹配表有id, uid1, uid2, 和一個主鍵,它是(uid1,uid2)
那么您的查詢將是這樣的
SELECT
C.name, D.name
FROM matches A
INNER JOIN matches B
ON A.uId1 = B.uId2 AND A.uId2 = B.pId1 AND B.Id > A.Id
INNER JOIN users C ON A.uId1 = C.Id
INNER JOIN users D ON A.uId2 = D.Id
或者你可以用CTE下面的方法來做,這會更快一點:
;WITH DATA AS (
SELECT
A.*
FROM matches A
INNER JOIN matches B
ON A.uId1 = B.uId2 AND A.uId2 = B.uId1 AND B.Id > A.Id )
SELECT
C.name, D.name
FROM DATA A
INNER JOIN users C ON A.uId1 = C.Id
INNER JOIN users D ON A.uId2 = D.Id
如果您無法更改 SQL 表及其結構,我將使用temp variable以下方法進行更改:
DECLARE @STARTDATA TABLE ( uid1 int, uid2 int, primary key (uid1, uid2) )
INSERT INTO @STARTDATA (uid1, uid2)
SELECT
A.uid1, A.uid2
FROM matches A
INNER JOIN matches B
ON A.uId1 = B.uId2 AND A.uId2 = B.uId1 AND B.Id > A.Id
SELECT
C.name, D.name
FROM @STARTDATA A
INNER JOIN users C ON A.uId1 = C.Id
INNER JOIN users D ON A.uId2 = D.Id
希望這可以幫助!
uj5u.com熱心網友回復:
您必須將 2 個副本加入USERS到您當前的加入中。
第一個副本將回傳男人的名字,第二個將回傳女人的名字:
SELECT um.NAME AS man_name,
uw.NAME AS woman_name
FROM Man_Result AS m JOIN Woman_Result AS w
ON w.ID_CHOOSE = m.ID_PERSON AND m.ID_CHOOSE = w.ID_PERSON
JOIN USERS AS um ON m.ID_PERSON = um.ID
JOIN USERS AS uw ON w.ID_PERSON = uw.ID;
請參閱演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/460348.html
上一篇:MySQL視圖中的左連接
