避免SQL SELECT查询中的冗余代码

时间:2014-04-07 12:55:10

标签: sql oracle query-optimization

我想避免我的查询有一些冗余代码。这是一个非常简单的例子,可以用来做什么:

SELECT 
   p.id,
   p.NOM,
   CONCAT(p.NANE,'_2') AS CLONE ,
   (SELECT id FROM person WHERE NAME = CONCAT(p.NOM,'_2')  )

FROM person p

我有两次相同的代码:

CONCAT(PERSON.NAME,'_CLONE')

维护起来并不容易(上面的代码只是我正在尝试做的一个简单示例)。

是否有解决方案可以获得相同的结果(在MySQL中运行(使用v14.14测试)):

SELECT 
  p.id,
  p.name,
  CONCAT(p.name,'_clone') as CLONE ,
  (SELECT ID FROM person WHERE name = CLONE) AS CLONE_ID

FROM person p

此代码不适用于Oracle 11.2.0.2.0 我是oracle的新手,所以我不知道上面的MySQL SQL代码的翻译是什么:s

你能帮我找一个好的写作方式吗?

1 个答案:

答案 0 :(得分:5)

我建议使用内联视图:

SELECT p.id,
       p.name,
      c.name clone_name,
      c.id clone_id
from person p
join
      (SELECT id, concat(name, '_clone') name FROM person) c
on p.name = c.name