两张表
表1 A:
id int
status int
default_name nvarchar表2 B:
id int
lang nvarchar
name nvarchar求一条高效的sql语句,其结果等于
(select id from A where id not in (select A.id from A, B where A.id=B.id and A.status=1 and lang='en') and status=1) union (select A.id from A, B where A.id =B.id and A.status=1 and lang='en')

解决方案 »

  1.   

    更详细一点,A.id 和B.id 是外键关系,如果在表B存在lang=en的纪录,选择表B的值,如果在表B没有相对应的纪录,则取出表A的值。(select id, default_name as name from A where id not in (select A.id from A, B where A.id=B.id and A.status=1 and lang='en') and status=1) union (select A.id B.name as name from A, B where A.id =B.id and A.status=1 and lang='en')
      

  2.   

    case 实现 SQL> select * from aa;I ST
    - --
    1 aa
    2 bb
    3 ccSQL> select * from ab;I LANG   NAME
    - ------ ----
    1 aa     123
    2 en     456
    3 en     789SQL>  select a.id,case when b.lang='en' then b.name else a.status end
      2   from aa a,ab b
      3   where a.id=b.id;I CASE
    - ----
    1 aa
    2 456
    3 789