mysql-在两列中查询或,然后返回一个名称
我有一个关于mysql查询的问题。我将编写一个mysql查询,在两列中搜索两个案例,然后这两列的返回数据应该具有相同的名称。我目前的查询想法如下:mysql-在两列中查询或,然后返回一个名称,mysql,sql,Mysql,Sql,我有一个关于mysql查询的问题。我将编写一个mysql查询,在两列中搜索两个案例,然后这两列的返回数据应该具有相同的名称。我目前的查询想法如下: SELECT * FROM `Table` WHERE (name=test AND `first_col` is NOT NULL) OR (name=test AND `second_column` is NOT NULL) 然后我得到了这样的结果: | id | name | first_col | second_col | +-
SELECT * FROM `Table`
WHERE (name=test AND `first_col` is NOT NULL) OR (name=test AND `second_column` is NOT NULL)
然后我得到了这样的结果:
| id | name | first_col | second_col |
+----+-------+---------------+-------------+
| 1 | test | [unused_data] | [data] |
+----+-------+---------------+-------------+
| 2 | test | [data] | unused_data]|
+----+-------+---------------+-------------+
所以我想要这样的东西
| id | name | col |
+----+-------+---------+
| 1 | test | [data] |
+----+-------+---------+
| 2 | test | [data] |
+----+-------+---------+
如果事件id相同但与上述两个条件匹配,则应显示在单独的行中
| id | name | col |
+----+-------+---------+
| 1 | test | [data] |
+----+-------+---------+
| 2 | test | [data] | // from first_col
+----+-------+---------+
| 2 | test | [data] | // from second_col
+----+-------+---------+
我需要你们的帮助,伙计们!谢谢大家! 将查询一分为二(每列一个),并将其与UNION ALL
组合:
SELECT id, name, first_col as col
FROM `Table`
WHERE name ='test' AND first_col is NOT NULL
UNION ALL
SELECT id, name, second_column as col
FROM `Table`
WHERE name='test' AND second_column is NOT NULL
ORDER BY id -- optional
将查询一分为二(每列一个),并将其与UNION ALL
组合:
SELECT id, name, first_col as col
FROM `Table`
WHERE name ='test' AND first_col is NOT NULL
UNION ALL
SELECT id, name, second_column as col
FROM `Table`
WHERE name='test' AND second_column is NOT NULL
ORDER BY id -- optional
没有工会的替代方案
SELECT
d.id
, d.NAME
, d.col
FROM (
SELECT
t.id
, t.NAME
, CASE
WHEN e.xtra = 'a' THEN t.first_col
WHEN e.xtra = 'b' THEN t.second_col
END AS col
FROM table1 t
CROSS JOIN (select 'a' xtra union all select 'b') AS e
WHERE NAME = test
) d
WHERE d.col IS NOT NULL
没有工会的替代方案
SELECT
d.id
, d.NAME
, d.col
FROM (
SELECT
t.id
, t.NAME
, CASE
WHEN e.xtra = 'a' THEN t.first_col
WHEN e.xtra = 'b' THEN t.second_col
END AS col
FROM table1 t
CROSS JOIN (select 'a' xtra union all select 'b') AS e
WHERE NAME = test
) d
WHERE d.col IS NOT NULL
谢谢你的快速回复,保罗!给我几分钟来测试和确认你的答案!非常感谢。它像我期望的那样工作:)!顺便问一下,Paul,你能给我推荐一些文章或书籍来改进mysql数据库设计吗?我使用nosql已经很长时间了,当我回到mysql时,我真的迷路了……@Kai抱歉,我不知道任何特定于设计的源代码,但我很确定有一些好书。我可以建议的是,官方的,当然还有官方的。另外一个很好的来源是-虽然更注重性能。感谢您的快速响应保罗!给我几分钟来测试和确认你的答案!非常感谢。它像我期望的那样工作:)!顺便问一下,Paul,你能给我推荐一些文章或书籍来改进mysql数据库设计吗?我使用nosql已经很长时间了,当我回到mysql时,我真的迷路了……@Kai抱歉,我不知道任何特定于设计的源代码,但我很确定有一些好书。我可以建议的是,官方的,当然还有官方的。另外一个很好的来源是-虽然更注重性能。事实上,我看到你的查询也有联合所有哈哈。但是谢谢你的建议,新的东西要学习:Dmy查询使用
交叉连接
,它将表中的行乘以2,在这个查询中没有联合所有
。您可能会发现它比使用union-all
更有效,但这需要测试。事实上,我看到您的查询也有union-all哈哈。但是谢谢你的建议,新的东西要学习:Dmy查询使用交叉连接
,它将表中的行乘以2,在这个查询中没有联合所有
。您可能会发现它比使用union-all
更有效,但这需要测试。