解释我想要做的事情很棘手 我从一个excel电子表格派生了2个表。电子表格定义了原因和影响。它有3个参考点,所以我不能把它变成1个表
此电子表格左侧有一系列事件,顶部有效果。这些通过在与事件匹配的行/列中插入X来与效果相关联。因此交叉的列/行形成矩阵。所以对于例如一个事件可能是。 '打开lightswitch'。沿着这一行,直到' X'找到了。然后按照列向上到效果,它会显示'指示灯亮起' (它比实际情况稍微复杂一点)X可以在同一行中定义多种效果
我的想法是在where语句中使用table1。*和table2。*但我正在寻找一个通配符来搜索行/列但是在研究之后这在mysql中是不可能的。对所有进一步的行/列组合使用OR不会起作用,因为它只显示带有X的所有内容
我有点难过如何查询表格的X行/列部分,所以只有'示例'在搜索所有X之后显示查询的结果部分下面的单个查询成功但我需要搜索table1.1-60 table2.2-61以查找' X'仅通过更改'%示例%'在网页mysql / php类型表单中查询的一部分,然后在另一页上显示结果
任何建议/替代方案欢迎致谢
SELECT
table1.equipment,
table1.tagno,
table2.equipment,
table2.action,
table2.service,
table2.tagno
FROM
table1 ,
table2
WHERE
table1.tagno LIKE '%example%' AND
table1.1 = 'X' AND
table2.2 = 'X'
答案 0 :(得分:1)
N
中的table1
列N+1
与table2
中的列select * from table1 t1, table2 t2
where t1.tagno like '%example%' AND t1.1 ='X' and t2.2 = 'X'
UNION
select * from table1 t1, table2 t2
where t1.tagno like '%example%' AND t1.2 ='X' and t2.3 = 'X'
UNION
-- ...
无法自然联接;你必须“手工”指定连接(或者在一个程序中,这两个都很丑陋)。
你想:
{{1}}
这可能效率很低。正如评论中所建议的那样,重新构建数据将为您提供更清晰的查询和更快乐的未来。
答案 1 :(得分:0)
为了更深入地了解我的建议,我会像这样重新建模数据:
CREATE TABLE effects (
id INT,
name VARCHAR(100)
);
CREATE TABLE events (
id INT,
name VARCHAR(100)
);
CREATE TABLE effects_events (
effect_id INT,
event_id INT
);
effects_events是Junction Table
所以你可以像这样查询:
SELECT * FROM events WHERE events.id = effects_events.event_id AND effects_events.effect_id = effects.id AND effects.name = 'light turns on';
或者:
SELECT * FROM effects WHERE effects.id = effects_events.effect_id AND effects_events.event_id = events.id AND events.name = 'turn on lightswitch';
我可能会误解你问题中的某些内容,但这对我来说似乎是最直接的解决方案。