【问题标题】:MySQL JSON array to used in "IN" clause?要在“IN”子句中使用的 MySQL JSON 数组?
【发布时间】:2017-01-18 13:19:56
【问题描述】:

我可以使用 JSON 数组作为 IN 子句与 MySQL(版本 5.7 及更高版本,因为它支持 JSON)的参数吗?

以下是我无法完全工作的代码...

    DROP TABLE IF EXISTS json_table;
    CREATE TEMPORARY TABLE json_table(     
        id INT,
        data JSON
    );

    INSERT INTO json_table (id, data) VALUES (1, "[1,2,3,4,19,20]");

    SELECT jt.id, jt.data, REPLACE(REPLACE(jt.data, '[', ''), ']', ''), jt.data->"$[4]"
    FROM json_table jt;

    SELECT stuff.name
    FROM table_stuff stuff
    #JOIN json_table jt ON stuff.id IN (1,2,3,4,19,20);
    JOIN json_table jt ON stuff.id IN (REPLACE(REPLACE(jt.data, '[', ''), ']', ''));        

    DROP TABLE IF EXISTS json_table;

【问题讨论】:

  • 你不能。这将需要动态构建(字符串)并执行查询。就像您写的一样,它只是一个 TEXT 值。请改用these functions
  • @KamilG。谢谢卡米尔

标签: mysql json mysql-5.7 mysql-json


【解决方案1】:

我希望 JSON 函数能够工作,而不是 IN。比如:

SELECT stuff.name
FROM table_stuff stuff JOIN
     json_table jt
     ON JSON_CONTAINS(jt.data, CONVERT(stuff.id, char)) = 1;

【讨论】:

  • Gordon,json_contains(...) = 1 会不会更整洁并遵循 0/1/null 返回值的逻辑以避免混淆?
  • @KamilG。 . . .是的。我第一次写的时候想到了find_in_set(),但是json_contains()只返回0和1(可能还有NULL)。
  • @aero 。 . .我很惊讶它不会自动进行转换。
  • @GordonLinoff... 是的,我很想看到它也需要它。它可能会给查询增加一些开销,但对于我的特定需求,我认为它会是最小的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多