我继承了一个拥有现有数据库结构的网站。我有一个表(TABLE1
),它具有以下结构:
POSITION_1_TAGS_PERMITTED | POSITION_2_TAGS_PERMITTED | POSITION_3_TAGS_PERMITTED
----------------------------------------------------------------------------------
CD | EN,CS | TECH,CS
TABLE1
此结构最多包含20列。
然后我有另一个表(TABLE2
)存储所选值(也有20列):
POS1_SEL_SYMBOL | POS2_SEL_SYMBOL | POS3_SEL_SYMBOL | POS4_SEL_SYMBOL
---------------------------------------------------------------------
A | AAPL | | AA
我有选定变量的标签,在这种情况下,我变量的标签是CS
。我想在TABLE1
中找到具有允许标记的位置,然后查看TABLE2
以查看该位置是否已有条目。在这种情况下,它会将位置3标识为要添加我的条目的列,然后我会编写一个新的更新语句以将该条目添加到数据库中。有没有一种简单的方法可以使用我的数据库的列格式?
编辑:如果变量有多个标签,我希望在其中搜索允许的标签列中的任何值。我尝试将我的SQL语句更新为如下所示:
SELECT eventid,
CASE
WHEN (FIND_IN_SET("S&P", POSITION_1_TAGS_PERMITTED) OR FIND_IN_SET("CS", POSITION_1_TAGS_PERMITTED)) AND POS1_SEL_SYMBOL = ""
THEN 1
END AS found_col
FROM TABLE1
JOIN TABLE2
USING (eventid)
WHERE EVENTID='159'
这个查询并没有给我提供与搜索CS相同的结果。
答案 0 :(得分:3)
SELECT eventid,
CASE
WHEN FIND_IN_SET('CS', POSITION_1_TAGS_PERMITTED) AND POS1_SEL_SYMBOL = ''
THEN 1
WHEN FIND_IN_SET('CS', POSITION_2_TAGS_PERMITTED) AND POS2_SEL_SYMBOL = ''
THEN 2
WHEN FIND_IN_SET('CS', POSITION_3_TAGS_PERMITTED) AND POS3_SEL_SYMBOL = ''
THEN 3
...
WHEN FIND_IN_SET('CS', POSITION_20_TAGS_PERMITTED) AND POS20_SEL_SYMBOL = ''
THEN 20
END AS found_col
FROM TABLE1
JOIN TABLE2 USING (eventid)
有关您可以使用上述结构进行调整的UPDATE
查询,请参阅SQL Insert in first empty column in a row MySQL error,以便您更新找到的字段,而不仅仅是返回列号。但是对于20列,该查询将变得非常长。