我正在尝试找出如何引用其他列的值的ALIAS。
我不确定是否有可能,但是它会获得一些窍门吗?
如何执行类似下面代码的查询?
SELECT chd_value AS **chd_key value**
FROM table1 where chd_id = 1;
其中chd_key将替换为表中“ chd_key”列的值。
所以我将得到类似的输出
。
答案 0 :(得分:1)
关键字是“枢轴”或“交叉列表”。
对于chd_key
中有限的已知数量的不同值,最快的技术是crosstab()
。喜欢:
SELECT *
FROM crosstab(
'SELECT chd_id, chd_key, chd_value
FROM tbl
where chd_id = 1
ORDER BY 1' -- ORDER BY redundant in this special case
, $$VALUES ('food'), ('color'), ('gadget')$$
) AS ct (chd_id int, food text, color text, gadget text);
详细说明:
但这不是完全动态的,而这是很难用SQL完成的。参见:
一种简单地获得"key":"value"
的方式,如您稍后评论:
SELECT format('"%s":"%s"', chd_key, chd_value) AS chd_pair
FROM tbl WHERE chd_id = 1;
答案 1 :(得分:0)
这不会像您在图像中显示的那样给您两行,但是如果您只希望将键/值对放在一列中,请对键/值对进行串联:
SELECT (chd_key || ':' || chd_value) AS chd_pair
FROM table1 WHERE chd_id = 1;
要根据要求以快速而肮脏的方式添加双引号:
SELECT ('"' || chd_key || '":"' || chd_value || '"') AS chd_pair
FROM table1 WHERE chd_id = 1;
这不是很漂亮,但是很容易并且有效。
答案 2 :(得分:0)
基于作者打算使用PHP的注释,可以使用PDO获得所需的输出。例如,假设$pdo
是PDO实例:
$pdo->query('SELECT chd_key, chd_value FROM table1 where chd_id = 1')
->fetchAll(PDO::FETCH_KEY_PAIR)
以上将导致与预期输出的关联数组。第一列用作键,第二列用作值:
[
'food' => 'chiken'
]