SQL如何使用连接表

时间:2017-08-21 09:33:27

标签: mysql sql join

您好我想从客户那里获取所有数据,其中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表中的第一行,即使有多个。

2 个答案:

答案 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