0

很难解释我要做什么,所以我有 2 个表来自一个 excel 电子表格。电子表格定义了因果关系。它有 3 个参考点,所以我无法将其放入 1 个表中

此电子表格左侧有一个事件列表,顶部有一个效果列表。这些通过在将事件与效果匹配的行/列中插入 X 来相互关联。所以相交的列/行形成一个矩阵。因此,例如一个事件可能是。'打开电灯开关'。沿着这一行直到找到“X”。然后跟随列到效果,它显示“灯亮”(它比现实中的要复杂一点)在同一行中可以有多个由 X 定义的效果

我的想法是在 where 语句中使用 table1.* 和 table2.* 但我正在寻找通配符来搜索行/列,但经过研究,这在 mysql 中是不可能的。对所有进一步的行/列组合使用 OR 将不起作用,因为它只显示带有 X 的所有内容

我有点难过如何查询表的 X 行/列部分,所以在搜索所有 X 之后只显示查询的“示例”结果部分下面的单个查询是成功的,但我需要搜索 table1.1- 60 table2.2-61 只在网页 mysql/php 类型表单中更改查询的 '%example%' 部分,然后在另一个页面上显示结果,出现 'X'

欢迎任何建议/替代方案谢谢

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'
4

2 回答 2

1

没有自然的方法可以将column inNtable1column N+1in连接起来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
-- ...

这可能非常低效。正如评论中所建议的,重塑数据会给你带来更清晰的查询和更幸福的未来。

于 2012-05-20T17:36:45.830 回答
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 是一个连接表

所以你可以这样查询:

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';

我可能会误解您的问题中的某些内容,但这对我来说似乎是最直接的解决方案。

于 2012-05-20T23:41:14.580 回答