繁体   English   中英

根据一列的值选择多列

[英]SELECT multiple columns based on value of one column

我想基于一列的值选择特定的列。

当前,我要做的是获取特定列的值并使用它进行另一个查询。 像这样:

SELECT service_type FROM agreements WHERE id = 1;

我将值传递给PHP变量,然后根据结果进行另一个查询。

样例代码:

if (service == 'internet')
SELECT ipreq, latency, ... FROM agreements WHERE id = 3 AND service_type = 'internet';
else
SELECT rates, markup, ... FROM agreements WHERE id = 3 AND service_type = 'vpn';

有办法做到这一点而不必诉诸多个查询吗?

聚苯乙烯

一些列来自另一个表。 我只想根据列的值从特定的表中选择特定的列(在本例中为service_type

好吧,假设在应用程序的后续过程中,您同样对结果列进行踩踏,则可以尝试使用

SELECT * FROM
(
    select service, ipreq, latency, ... FROM agreements WHERE id = 3
    UNION ALL
    select service, rates, markup, ... FROM agreements WHERE id = 3
) tmp
WHERE service = 'internet'

这将为id = 3选择所有可能的条目的组合,然后选择service所需的条目。

但是,这仅适用于所有字段具有相同的类型。

也许您还应该重命名字段以统一对它们的访问,例如

SELECT * FROM
(
    select service, ipreq as field1, latency as field2, ... FROM agreements WHERE id = 3
    UNION ALL
    select service, rates as field1, markup as field2, ... FROM agreements WHERE id = 3
) tmp
WHERE service = 'internet'

如果您不想这样做,则需要在应用程序中按列索引访问它们。 字段类型仍然必须相同。

编辑:

这是更新的代码:

SELECT * FROM
(
     SELECT doc.id as docid, service, ipreq, latency,... FROM agreements WHERE service = 1
     UNION ALL
     SELECT doc.id as docid, service, rates, markup,... FROM agreements WHERE service = 2
) as tmp
WHERE docid = 1

现在,此代码将选择与特定服务类型有关的所有字段。

Mysql支持控制流语法 ,该语法使您可以在查询内部构建IF / ELSE。 您甚至可以在If / Else语句中使用子查询来创建非常动态的select语句。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM