我需要什么样的查询来比较这些值

  • 本文关键字:比较 查询 什么样 mysql
  • 更新时间 :
  • 英文 :


我想添加"ID_CHOOSE2""ID_ CHOOSE3";等等,我必须创建什么样的查询才能使其正确?我尝试使用";OR":

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)

正如您所看到的,查询工作不好,因为它的结构很差。

我指的是一种类型的比较:一个人选择了某个人(选择(和另一个人(选择2(。检查对方是否在所有选择中选择了第一个人(选择、选择2等(。如果是,他们匹配,如果不是,不要显示和检查其他人。我想要输出像:

TOM W  | KATE B
MARK K | KATE B
MARK K | ALEX S

我的代码与desc:https://onecompiler.com/mysql/3xz4552uv

--编辑以获取更多信息---我有一张男女桌(用户(还有另外两张包含男性和女性选择的表格

现在我想找到一个匹配项(谁根据"选择"列中的选择匹配谁-他们并不总是按顺序排列。有时是3,2,1,有时是1,3,2(下面的例子说明了这一点:

ID_人:

1 - JACK  - Choose: 1,3,2 (Mary, Emily, Lilly)
2 - TOM   - Choose: 1,2,3 (Mary, Lilly, Emily)
3 - HARRY - Choose: 2,1   (Lilly, Mary)
| ID | ID_PERSON | ID_CHOOSE | ID_CHOOSE2 | ID_CHOOSE3  |
| 1  |      1    |     1     |     3      |     2       | 
| ID | ID_PERSON | ID_CHOOSE | ID_CHOOSE2 | ID_CHOOSE3  |
| 2  |      2    |     1     |     2      |     3       | 
| ID | ID_PERSON | ID_CHOOSE | ID_CHOOSE2 | ID_CHOOSE3  |
| 3  |      3    |     2     |     1      | NULL(empty) | 

ID_PERSON女性:

1 - Mary  - Choose: 3,1,2 (Harry, Tom, Jack)
2 - Lilly - Choose: 1,2   (Jack, Harry)
3 - Emily - Choose: 1,2,3 (Jack, Tom, Harry)
| ID | ID_PERSON | ID_CHOOSE | ID_CHOOSE2  | ID_CHOOSE3 |
| 1  |      1    |     3     |     1       |     2      | 
| ID | ID_PERSON | ID_CHOOSE | ID_CHOOSE2  | ID_CHOOSE3 |
| 2  |      2    |     1     | NULL(empty) |     2      | 
| ID | ID_PERSON | ID_CHOOSE | ID_CHOOSE2  | ID_CHOOSE3 |
| 3  |      3    |     1     |     2       |     3      | 
Match:
JACK  Matched with: Mary, Emily, Lilly
TOM   Matched with: Mary, Emily
Harry Matched with: Lilly, Harry

感谢

这里有一个替代schéma
请参阅下面的dbFiddle链接。

SELECT * FROM users;
SELECT * FROM choices;
id|name|gender--:|:-------|:-----101|KATE B|F102|ALEX S|F203|tomw|M204|标记K|M205 |丹尼斯chid|chooser|choice---:|------:|-----:1 | 203 | 1012 | 203 | 1023 | 204 | 1024 | 204 | 1015 | 101 | 2036 | 101 | 2047 | 102 | 2048 | 102 | 205
select 
m.id, m.name man,
f.id, f.name woman
from
choices c 
join choices s 
on c.chooser = s.choice
left join users m on m.id = c.chooser
left join users f on f.id = c.choice
where s.chooser = c.choice
and m.gender = 'M'
and f.gender = 'F';
id|man|id|woman--:|:-----|--:|:-----203|汤姆W|101|凯特B204|MARK K|101|KATE B204|MARK |102|ALEX S

db<gt;小提琴这里

最新更新