我知道标题含糊不清,这可能让我难以解释,但这是我想要实现的目标。
说我有一个叫做商品的表。
在该表中,我有一个ID,密码,文件,组等。
我想查询密码为“ thispassword”的地方。很容易。
但是然后以某种方式加入该查询的结果还包括group = file
的位置id | password | file | group
----------------------------------
1 | passA | 1filea | group1
2 | passB | 2fileb | group1
3 | | group1 |
4 | passD | 4filed | group2
5 | passD | 5filee | group2
6 | | group2 |
在上表中,如果我查询passA(WHERE密码='passA'),则在group列中有 group1 。我还想在同一查询中返回文件等于group1的文件,该文件将是上表中的id:3。
答案 0 :(得分:0)
看来我们可以使用MySQL逻辑OR
运算符来满足规范。
https://dev.mysql.com/doc/refman/5.7/en/logical-operators.html#operator_or
FROM mytable t
WHERE t.password = 'passA'
OR t.file = 'group1'
鉴于示例数据,我们希望它返回两行,id值为1和3。
规范尚不完全清楚。我们可以结合多个条件以获得不同的结果:
FROM mytable t
WHERE ( t.password IN ('passA','') OR t.password IS NULL )
AND t.file = 'group1'
编辑
如果我了解规范,则group
列中的值是file
列的外键。
SELECT t.id
, t.password
, t.file
, t.group
FROM mytable t
WHERE t.password = 'passA'
UNION ALL
SELECT f.id
, f.password
, f.file
, f.group
FROM mytable g
JOIN mytable f
ON f.file = g.group
WHERE g.password = 'passA'