从2个表中选择数据,其中多个列和行与' X'

时间:2012-05-20 17:16:05

标签: mysql

解释我想要做的事情很棘手 我从一个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'

2 个答案:

答案 0 :(得分:1)

N中的table1N+1table2中的列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';

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