0

我有两个表,我需要获取不在另一个表中的所有 store_id 的列表

BusinessUnit Table   User Table
StoreId(varchar)     StoreId(varchar)
1                    1,2
2                    3,4
3                    1,5
4                    4,6
7                    4

如何获取业务单元表中不存在但用户表中存在的 storeid 5,6 的值?尝试使用 find_in_set 使用几个,但没有任何效果。

4

2 回答 2

0

如果您知道所有可能的值(并且它们的数量是合理可管理的),您可以用它们填充一个新表(您可以创建它TEMPORARY或在之后删除它),然后执行此操作

SELECT * 
FROM (
      SELECT allIDs.Id 
      FROM allIDs 
         INNER JOIN `User` AS u 
         -- ON CONCAT(',', u.StoreID, ',') LIKE CONCAT('%,', allIDs.Id, ',%')
         ON FIND_IN_SET(allIDs.Id, u.StoreID)
   ) AS IDsInUserTable
   LEFT JOIN `BusinessUnit` AS b ON IDsInUserTable.Id = b.StoreID
HAVING b.StoreID IS NULL
;

在这个例子中,allIDs 是前面提到的“可能值”表。

于 2015-05-14T17:05:24.530 回答
0

用于SUBSTRING_INDEX从 CSV 字段中获取所有值。由于 CSV 中最多可以有 6 个 ID,因此您需要为每个位置调用一次。

SELECT u.StoreId
FROM (
    select substring_index(StoreId, ',', 1) AS StoreID
    FROM User
    UNION
    select substring_index(substring_index(StoreId, ',', 2), ',', -1)
    FROM User
    UNION
    select substring_index(substring_index(StoreId, ',', 3), ',', -1)
    FROM User
    UNION
    select substring_index(substring_index(StoreId, ',', 4), ',', -1)
    FROM User
    UNION
    select substring_index(substring_index(StoreId, ',', 5), ',', -1)
    FROM User
    UNION
    select substring_index(substring_index(StoreId, ',', 6), ',', -1)
    FROM User) AS u
LEFT JOIN BusinessUnit AS b ON u.StoreId = b.StoreID
WHERE b.StoreId IS NULL

演示

于 2015-05-14T17:06:43.130 回答