json类型可以和和其他表进行关联查询吗

json类型可以和和其他表进行关联查询吗
image
image
如何写sql

TiDB 支持在 JSON 类型的列上进行查询,但是 JSON 类型的列不能直接与其他表进行关联查询。如果您需要在 JSON 类型的列上进行关联查询,可以考虑使用 TiDB 的 Generated Column 特性。

Generated Column 是一种虚拟列,它的值是通过计算其他列的值得到的。您可以使用 Generated Column 将 JSON 类型的列中的某些字段提取出来,然后将这些字段作为 Generated Column 的值。这样,您就可以在 Generated Column 上进行关联查询了。

以下是一个示例,假设您有一个名为 user 的表,其中包含一个 JSON 类型的列 info,其中包含用户的姓名和年龄信息:

CREATE TABLE user (
  id INT PRIMARY KEY,
  info JSON
);

INSERT INTO user VALUES (1, '{"name": "Alice", "age": 20}');
INSERT INTO user VALUES (2, '{"name": "Bob", "age": 30}');

现在,假设您有另一个名为 order 的表,其中包含一个 user_id 列,表示订单所属的用户 ID。如果您想要查询订单所属用户的姓名和年龄,可以使用 Generated Column 来提取 user 表中 info 列中的姓名和年龄信息:

ALTER TABLE user ADD COLUMN name VARCHAR(255) GENERATED ALWAYS AS (info->"$.name") VIRTUAL;
ALTER TABLE user ADD COLUMN age INT GENERATED ALWAYS AS (info->"$.age") VIRTUAL;

SELECT order.id, user.name, user.age
FROM order
JOIN user ON order.user_id = user.id;

在上面的示例中,我们使用 ALTER TABLE 语句创建了两个 Generated Column,分别提取了 info 列中的姓名和年龄信息。然后,我们可以在 user 表的 Generated Column 上进行关联查询,以获取订单所属用户的姓名和年龄。

什么场景需要这么关联,真要这么干我觉得应该调整下数据模型。
tidb好像不太行吧,pg貌似可以。

不能。

如何写子查询,该怎么写呢

可以用子查询吗,如果子查询可以,怎么写呢

子查询可以吗,如果可以该怎么写呢