我想在我的MYSQL数据库上运行一个查询。我正在搜索的表有一个file_type字段,它将是三个值之一(1,2,3)。根据这些值,我想从数据库中查找不同的信息。
例如,如果'file_type'字段是1或2,那么我想选择字段a,b,c,d 但是,如果我注意到file_type = 3,那么我想选择字段a,b,c,d,e,f
这可以在一个SELECT语句中完成吗?像这样 - 是啊
my_simple_query = SELECT file_type,a,b,c,d FROM table1
my_new_query = SELECT file_type,a,b,c,d (AND e,f IF file_type = 3) FROM table1
感谢所有
---------------------------------- ADDITION ------------ -----------------------
如果e,f存储在另一个表中,我该如何做?
my_multitable_query = SELECT file_type,id,a,b,c,d (AND e,f FROM table2 WHERE id=id) FROM table1
让我的漂移?
答案 0 :(得分:5)
不,SQL SELECT语句不支持可选列。
但是您可以指定逻辑仅根据条件返回值,否则它们将为null:
SELECT a,b,c,d,
CASE WHEN file_type = 3 THEN t2.e ELSE NULL END AS e,
CASE WHEN file_type = 3 THEN t2.f ELSE NULL END AS f
FROM TABLE_1 t1
JOIN TABLE_2 t2 ON t2.id = t1.id
答案 1 :(得分:3)
如果您需要非关系型数据,您可能会更乐意使用非关系型数据库,例如CouchDB或MongoDB。
在SQL中,您必须在编写查询时声明所有列。所有这些列必须出现在结果集的每一行;列集不能根据每行中的内容而变化。这实际上是作为关系数据库的定义(以及每行在每一行上具有相同类型的要求)。
关于你的其他问题,这可能会到达某个地方:
SELECT t1.file_type, t1.a, t1.b, t1.c, t1.d, t2.e, t2.f
FROM table1 t1
LEFT OUTER JOIN table2 ON t1.id=t2.id;
你仍会在结果集的每一行上得到e和f列,即使它们是NULL,因为table2中对于table1中的给定行没有匹配。
这会给你一个名为Class Table Inheritance的模式。
答案 2 :(得分:0)
不熟悉mysql,但为什么不使用UNION
?
> SELECT file_type,a,b,c,d FROM table1 WHERE file_type in (1,2)
> UNION
> SELECT file_type,a,b,c,d,e,f FROM table1 WHERE file_type = 3