SQL IN(SELECT语句),其中匹配的SELECT语句是数组,这可能吗?

时间:2019-03-29 05:11:27

标签: mysql arrays pdo

我有两个数据库要与之匹配。其中一个具有一列,该列存储与另一个表匹配的信息数组。

table1
 ------------------------------------
| collection_id |        items_array |
 ------------------------------------
|          123  | ['item1' ,'item2'] |
 ------------------------------------

table2
 ---------------------
|  user_id |  item_id |
 ---------------------
|        2 |    item1 |
|        1 |    item2 | 
 ---------------------

我想进行一个SQL查询,该查询将使用table1.collection_id获取table1.items_array列,然后获取每个table2.user_id,其中table2.item_id位于table1.items_array数组中。我现在的表情是(在PDO中):

SELECT
    table2.user_id
FROM table2
WHERE table2.item_id IN (
    SELECT table1.items_array
    FROM table1
    WHERE table1.collection_id = ?
)

因此,想法是IN语句应该来自items_array列中的数组。但是,这不起作用。我尝试以不同的方式格式化items_array列中的数组,以查看它是否是语法错误。我尝试了以下方法:

['item1', 'item2']
['item1','item2']
'item1', 'item2'

但是它们似乎都没有达到预期的结果。

是否有可能做我想做的事情,还是应该以其他方式寻求存储信息的机会?我想将其存储为一个数组,因为一旦放置了该数组,用户就不再需要更新或与该数组匹配,因此我认为不会出现规范化问题。

2 个答案:

答案 0 :(得分:0)

请尝试以下查询


SELECT @items := items_array FROM table1 WHERE collection_id = 123;

SELECT table2.user_id
FROM table2
WHERE table2.item_id IN  ( @items );

答案 1 :(得分:0)

尝试使用Like代替IN。

with table2 as 
(
select item_id ='item1' union select 'item2' union select 'item3' union select 'item4' 
)
    select item_id from table2 where item_id like  '%' +
    (
    select items_array from
        (
        select items_array = '[''item1'',''item2'']' 
        ) table1
    )