显示重复值子查询mysql

时间:2015-06-07 00:33:54

标签: mysql duplicates subquery

我有一个带有子查询的mySQL查询。 这个子查询:

(SELECT r.tlf_reserva 
 FROM eventos e 
    INNER JOIN Reservas r 
    INNER JOIN viajes v 
 WHERE r.id_viaje=v.id_propia AND e.id=1) 

返回两个值,但查询:

SELECT nombre 
FROM tblRegistration 
WHERE tlf= ALL(
             SELECT r.tlf_reserva 
             FROM eventos e 
              INNER JOIN Reservas r 
              INNER JOIN viajes v 
             WHERE r.id_viaje=v.id_propia 
             AND e.id=1) 

返回一个值。

这两个值是重复的,但我想在第二个查询中显示它们

3 个答案:

答案 0 :(得分:2)

使用联接操作

  SELECT t.nombre 
    FROM tblRegistration t 
    JOIN ( SELECT r.tlf_reserva 
             FROM eventos e
            CROSS 
             JOIN Reservas r
             JOIN viajes v 
               ON v.id_propia = r.id_viaje
            WHERE e.id=1
         ) v
      ON t.tlf = v.tlf_reserva

最佳做法是限定所有列引用,并将连接谓词放在ON子句而不是WHERE中。

答案 1 :(得分:1)

我找到了解决方案,这里是正确的查询:

SELECT nombre FROM tblRegistration a INNER JOIN(SELECT r.tlf_reserva FROM eventos e INNER JOIN Reservas r INNER JOIN viajes v WHERE r.id_viaje=v.id_propia AND e.id=1) b where a.tlf=b.tlf_reserva

答案 2 :(得分:0)

不,因为两个值相同(重复)并且您选择单个字段;只显示一次。如果你仍然强烈想要展示,你可以使用UNION ALL之类的

SELECT nombre 
FROM tblRegistration 
WHERE tlf = ALL(SELECT r.tlf_reserva 
FROM eventos e 
INNER JOIN Reservas r 
INNER JOIN viajes v 
WHERE r.id_viaje=v.id_propia 
AND e.id=1)

UNION ALL

SELECT nombre 
FROM tblRegistration 
WHERE tlf = ALL(SELECT r.tlf_reserva 
FROM eventos e 
INNER JOIN Reservas r 
INNER JOIN viajes v 
WHERE r.id_viaje=v.id_propia 
AND e.id=1)