您好我想从客户那里获取所有数据,其中id位于另一个表的逗号分隔列表中。我当前的SQL查询看起来像这样。
SELECT t.trip, t.array, v.* FROM trips t
INNER JOIN customers v ON v.id IN (t.array)
WHERE t.date='2017-08-21'
ORDER BY t.trip
问题是它只返回customers表中的第一行,即使有多个。
答案 0 :(得分:2)
根据您的问题,您似乎试图将join
customer
与所有ids
一起存储为t.array
中的逗号分隔列表,在这种情况下FIND_IN_SET就是您所需要的。
SELECT t.trip, t.array, v.* FROM trips t
INNER JOIN customers v ON FIND_IN_SET(v.id,t.array) > 0
WHERE t.date='2017-08-21'
ORDER BY t.trip
P.S - 将它们存储为字符串并不是一个好习惯。
答案 1 :(得分:0)
我认为在MYSQL中你可以使用FIND_IN_SET
CREATE TABLE c_customers (ID int);
CREATE TABLE t_trips (TRIP int, ARRAY VARCHAR(100));
INSERT INTO c_customers VALUES (1);
INSERT INTO c_customers VALUES (2);
INSERT INTO c_customers VALUES (3);
INSERT INTO t_trips VALUES (1, '1,2');
INSERT INTO t_trips VALUES (2, '2,3');
INSERT INTO t_trips VALUES (3, '3,4');
SELECT t.trip, t.array, v.*
FROM t_trips t
INNER JOIN c_customers v ON FIND_IN_SET(v.id,t.array)
WHERE t.trip IN (3);
输出:
trip array ID
1 3 3,4 3