2015-10-17 117 views
0

我试图使基于另一个查询结果的查询,主要查询是这样的:子查询到的LIKE条件的MySQL

SELECT d.nombre, d.apellido,em.codigo, em.descripcion, d.iddocente, em.idequipoMulti 
     FROM docenteequipomulti dem 
     INNER JOIN docente d ON dem.docente_iddocente=d.iddocente 
     INNER JOIN equipomulti em ON dem.equipoMulti_idequipoMulti=em.idequipoMulti 
     WHERE 
dem.iddocenteEquipoMulti LIKE '%(subquery)%' 

没有where它告诉我所有的值,但我必须通过子查询返回的值来过滤它们。

这是子查询:

SELECT concat_ws ('-', m.numModulo, p.periodo) AS MPeriodo FROM modulos m INNER JOIN periodo p ON m.periodo_idperiodo=p.idperiodo WHERE m.estado=1

该查询始终会得到如“1-2015”的一个值,但我把子查询到“()”,并没有工作。我究竟做错了什么?

编辑:我有一些IDS这样

1--1-2015 - EQ1

1--1-2015 - EQ2

2--1-2015-- EQ3

1--2-2015 - EQ1

的想法是过滤那些具有“1-2015” IDS不管他们有什么其他,所以它必须只显示3行,但不包括最后一个。

+0

只需将模块添加到JOIN – Mihai

+0

问题是,该idmodulos不等于其他id,例如,dem.iddocenteEquipoMulti是:“1--1-2015 - Eq1”,值为I与子查询得到的是:“1-2015”如果它是相似的,我不得不比较 –

回答

0

好了,我不能让工作,因为我想它,而不是我做子查询将其保存到变量中,然后将其用作主体查询的参数,感谢您的帮助。

1

编辑,以满足变化的问题

你应该包括在JOINmodulos和过滤器JOIN ... ON

SELECT d.nombre, d.apellido,em.codigo, em.descripcion, d.iddocente, em.idequipoMulti 
    FROM docenteequipomulti dem 
    INNER JOIN docente d ON dem.docente_iddocente=d.iddocente 
    INNER JOIN equipomulti em ON dem.equipoMulti_idequipoMulti=em.idequipoMulti 
    JOIN modulos m ON (dem.iddocenteEquipoMulti LIKE concat('%',m.numModulo, '-', p.periodo,'%') AND m.estado=1) 
    JOIN periodo p ON m.periodo_idperiodo=p.idperiodo; 
+0

那么这是什么关系呢? – vhu

+0

在表中,我显示了查询的值,但是想法是,每个特定时间,其庄园= 1的idmodulos将会改变,例如今天活动是第一个,我的意思是“1-2015”,明天它可以是“2-2015”dem.iddocenteEquipoMulti的ID由三个值的联合组成,它们之间的三个ID是idmodulo,所以在我的表(php)中,我显示了查询得到的行,但正如我所说的可以改变,所以我不得不通过那个ID来过滤“相似”不等于 –

+0

@ErickKirei,看到更新的答案。 – vhu