按优先级从两个表中选择

时间:2014-04-04 12:08:18

标签: sql sql-server

我想让我的网站内容可编辑,但编辑的项目只有编辑器可见,直到编辑得到主持人的验证。我将新编辑保存到另一个表现在问题是我想从默认表中选择所有项目,但是如果对项目进行编辑则从该表中获取它而不是默认表格

select * from (
select * from items where name = @name and 
name not in (select name from edits where name = @name and ip = @ip)
union 
select * from edits where name = @name) tmp order by name

问题是用户可能无法编辑所有字段,我必须从默认表中填写这些空(或空)列

编辑:换句话说,我想从默认表中选择,但如果编辑器IP与当前用户匹配,则替换所有已编辑项目的已编辑字段

任何想法?

2 个答案:

答案 0 :(得分:1)

假设表格的结构如下:

edits (col1, col2, col3, col4)
items (col1, col2, col3)

您可以使用此代码:

select 
   COALESCE(b.col1,a.col1) col1
  ,COALESCE(b.col2,a.col2) col2
  ,COALESCE(b.col3,a.col3) col3
  ,col4 col4
from
    edits a
full outer join
    items b
      on a.name = b.name
where a.name = @name
AND   ISNULL(@ip,b.ip) = b.ip

我希望这会对你有所帮助

答案 1 :(得分:0)

外连接表并替换编辑中存在NULL的列的项目中的值:

select isnull(i.col1, e.col1) as col1, etc
from items i
left outer join edits e
on i.name = e.name