开启后加入Select Statement

时间:2016-11-08 10:46:02

标签: mysql sql oracle

是否有可能加入我分手的字符串的一部分? 我试了一下:

SELECT param.par_name, 
   PARPAT.pp_pattern, 
   KOM.kom_name 
FROM   inv.inv_parpat PARPAT 
       INNER JOIN inv.inv_param PARAM 
               ON PARPAT.pp_par_id = PARAM.par_id 
       INNER JOIN inv.inv_komponente KOM 
               ON KOM.kom_id = (SELECT Substr(PARPAT.pp_pattern, 
                                       Instr(PARPAT.pp_pattern, ':') + 1 
                                       ) 
                                FROM   inv.inv_parpat) 
WHERE  PARPAT.pp_pattern LIKE '%ATA%'; 

该声明说: 单行子查询返回多行

2 个答案:

答案 0 :(得分:2)

为什么使用子查询?你已经有了这张桌子,为什么不用呢? :

SELECT param.PAR_NAME,
       PARPAT.PP_PATTERN,
       KOM.KOM_NAME
  FROM INV.INV_PARPAT PARPAT
       INNER JOIN INV.INV_PARAM PARAM 
        ON PARPAT.PP_PAR_ID = PARAM.PAR_ID
       INNER JOIN INV.INV_KOMPONENTE KOM
        on KOM.KOM_ID = SUBSTR(PARPAT.PP_PATTERN,INSTR(PARPAT.PP_PATTERN, ':')+1)
WHERE PARPAT.PP_PATTERN LIKE '%ATA%';

答案 1 :(得分:0)

您需要根据子字符串列将其加入PARPAT。如果使用子查询加入,则子查询应仅返回一个值(如max()或min()函数将执行的操作)。否则,您可以将IN子句与子查询一起使用。但请记住,使用IN时需要考虑性能因素。对于您的情况,请尝试以下查询:

SELECT param.PAR_NAME,
       PARPAT.PP_PATTERN,
       KOM.KOM_NAME
  FROM INV.INV_PARPAT PARPAT
       INNER JOIN INV.INV_PARAM PARAM ON PARPAT.PP_PAR_ID = PARAM.PAR_ID
       INNER JOIN INV.INV_KOMPONENTE KOM on KOM.KOM_ID = (SUBSTR(PARPAT.PP_PATTERN,INSTR(PARPAT.PP_PATTERN, ':')+1))
 WHERE PARPAT.PP_PATTERN LIKE '%ATA%';