亲爱的IT神人,小弟自学只会很基础的SQL 语法,目前遇到以下难题
一笔资料订单另一笔是比对用表格,我希望能透过SQL 资料比对
透过比对表 来找出 订单报表中最右边那栏的结果
主要是各栏位都有些不规则
之前在Excel是用布林值比对一列一列往下比对所有项目都符合目前转移到SQL我是本来是使用Like+\'%\'的查找方式搭配Left Join目前是用
From 订单报表 left join 比对表On ID包含 like %ID%and ID排除 not like %ID%
但是ID 包含的"全"ID不知道该怎么处理
谢谢
2 个回答
0
Zero皇
iT邦研究生 2 级 ‧ 2025-01-13 21:21:06
感觉你是想要下面这样?
From 订单报表 left join 比对表
On (ID包含 like %ID% or ID包含 = "全")
and ID排除 not like %ID%
如果可以给完整一点的SQL(like那段),可能会更看得懂一点
0
walljack1
iT邦新手 5 级 ‧ 2025-01-15 19:56:05
WITH RECURSIVE numbers AS (
SELECT 1 AS n
UNION ALL
SELECT n + 1
FROM numbers
WHERE n <= 10
)
SELECT
订单报表.ID AS 订单ID,
订单报表.参数,
订单报表.比对结果,
比对表.ID包含,
比对表.比对合併,
比对表.参数名称
FROM
比对表
LEFT JOIN
订单报表
ON
(
比对表.ID包含 = \'全\' OR
EXISTS (
SELECT 1
FROM (
SELECT TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(比对表.ID包含, \':\', n), \':\', -1)) AS single_id
FROM numbers
) AS split_ids
WHERE 订单报表.ID LIKE CONCAT(\'%\', split_ids.single_id, \'%\')
)
)
AND
(比对表.ID排除 IS NULL OR 订单报表.ID NOT LIKE CONCAT(\'%\', 比对表.ID排除, \'%\'));
你说的是这样吗?