我想从特定的行中检索一些数据,但是我不知道数据在哪一列。 例如。
col1 col2 col3 col4 col5 col6
row1 A B C D E F
row2 H B G E I J
现在我需要数据B和G,它在row1和row2中,并且我需要在运行命令时像B C D E那样取出值。
很可能使我能够思考应该为它编写什么好的代码。
预期输出
B C D E from row1
B G E from row2
这是实际数据 我需要在GTB和Sion之间调用数据的地方 有两行提供GTB和SION 但是它们都在不同的列中
SELECT __________
FROM `busroute`
WHERE 'GTB' IN (Source,Stop2,Stop3,Stop4,Stop5,Stop6,Stop7,Stop8,Stop9,Destination)
AND 'Wadala' IN (Source,Stop2,Stop3,Stop4,Stop5,Stop6,Stop7,Stop8,Stop9,Destination);
输出应为:
ROW1 - Sion Koliwada GTB
ROW2 - Sion SionCircle Koliwada GTB
答案 0 :(得分:1)
这可能不是最佳方法,但是您可以按照以下方式获得答案:
Sion
是源,GTB
是目的地。如果您不同,则将源值替换为Sion
的所有值,将目标值替换为GTB
的所有值。--
符号来区分两个站。像Sion Circle
具有Sion
作为代表另一个站点的子字符串。逻辑:
任何目的地的任何路线均应存在两个站点。因此,我们为所有输入WHERE
使用了IN
子句和stops
运算符的两个输入。
CONCAT_WS('--', '--', Source,Stop2,Stop3,Stop4,...,Destination, '--')
它创建由--
分隔的所有电台的列表,并在两端添加--
。例如--A--B--C--D--
。
为什么添加--
,所以我们可以对一个站点进行完整的精确搜索,以使其不会与其他站点重叠。
Example: if I have to search 'Sion' then search will be `--Sion--`
--Sion--Sion Circle--BC : Return true
--Sion Circle--BC--AKDKJ--: return false, simple search would have return true.
SUBSTRING_INDEX
用于根据来源或目的地删除路线的不必要的左右部分--
。查询:
SELECT
b.RouteID,
b.BusNo,
REPLACE(CONCAT_WS(' ', 'Sion', SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT_WS('--', '--', Source,Stop2,Stop3,Stop4,Stop5,Stop6,Stop7,Stop8,Stop9,Destination, '--'), '--Sion--', -1), '--GTB--', 1),'GTB'),'--', ' ') as route
FROM busroute b
WHERE 'GTB' IN (Source,Stop2,Stop3,Stop4,Stop5,Stop6,Stop7,Stop8,Stop9,Destination)
AND 'Sion' IN (Source,Stop2,Stop3,Stop4,Stop5,Stop6,Stop7,Stop8,Stop9,Destination);