我有两个数据库要与之匹配。其中一个具有一列,该列存储与另一个表匹配的信息数组。
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'
但是它们似乎都没有达到预期的结果。
是否有可能做我想做的事情,还是应该以其他方式寻求存储信息的机会?我想将其存储为一个数组,因为一旦放置了该数组,用户就不再需要更新或与该数组匹配,因此我认为不会出现规范化问题。
答案 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
)