有什么办法可以让 ALIAS 引用其他列值吗?
Is there any way where I can do ALIAS reference other column value?
我想弄清楚如何使用 ALIAS 来引用其他列的值。
我不确定是否可行,但它是否需要一些技巧才能完成?
如何执行类似下面代码的查询?
SELECT chd_value AS **chd_key value**
FROM table1 where chd_id = 1;
其中 chd_key 将替换为 table 中 "chd_key" 列的值。
所以我会得到类似于
的输出
.
这不会像您在图像中显示的那样为您提供两行,但如果您只想在一列中显示 key/value 对,请对 key/value 对进行串联:
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;
它不漂亮,但它很简单而且有效。
根据作者打算使用的注释PHP,可以使用PDO来获得想要的输出。例如,假设 $pdo
是一个 PDO 实例:
$pdo->query('SELECT chd_key, chd_value FROM table1 where chd_id = 1')
->fetchAll(PDO::FETCH_KEY_PAIR)
以上将生成具有预期输出的关联数组。第一列用作键,第二列用作值:
[
'food' => 'chiken'
]
关键字是"pivoting"或"cross tabulation"。
对于 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);
详细说明:
- PostgreSQL Crosstab Query
但这不是完全动态的,SQL 很难做到这一点。参见:
- Dynamic alternative to pivot with CASE and GROUP BY
一种简单地获得 "key":"value"
的方法就像你后来评论的那样:
SELECT format('"%s":"%s"', chd_key, chd_value) AS chd_pair
FROM tbl WHERE chd_id = 1;
我想弄清楚如何使用 ALIAS 来引用其他列的值。
我不确定是否可行,但它是否需要一些技巧才能完成?
如何执行类似下面代码的查询?
SELECT chd_value AS **chd_key value**
FROM table1 where chd_id = 1;
其中 chd_key 将替换为 table 中 "chd_key" 列的值。
所以我会得到类似于
的输出这不会像您在图像中显示的那样为您提供两行,但如果您只想在一列中显示 key/value 对,请对 key/value 对进行串联:
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;
它不漂亮,但它很简单而且有效。
根据作者打算使用的注释PHP,可以使用PDO来获得想要的输出。例如,假设 $pdo
是一个 PDO 实例:
$pdo->query('SELECT chd_key, chd_value FROM table1 where chd_id = 1')
->fetchAll(PDO::FETCH_KEY_PAIR)
以上将生成具有预期输出的关联数组。第一列用作键,第二列用作值:
[
'food' => 'chiken'
]
关键字是"pivoting"或"cross tabulation"。
对于 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);
详细说明:
- PostgreSQL Crosstab Query
但这不是完全动态的,SQL 很难做到这一点。参见:
- Dynamic alternative to pivot with CASE and GROUP BY
一种简单地获得 "key":"value"
的方法就像你后来评论的那样:
SELECT format('"%s":"%s"', chd_key, chd_value) AS chd_pair
FROM tbl WHERE chd_id = 1;