1

我的下一个查询有问题

select b.street_name 
from family a, address b,adress2 c 
where a.id_family=b.id_family 
  and a.id_famiy=c.id_family

我遇到的问题是,但出于某种不合逻辑的原因,有 2 个带有地址的表,所以当 b.street 地址为 '' 或 null 时,我想从地址比较另一个名为 cve_col 的字段,该字段也在 address2 上包含街道的名称。

编辑:

我又读了一遍,很困惑,我需要类似 if b.street_name='' then c.cve_col=b.cve=col 然后我可以在选择中添加案例select case when b.street_name='' then c.street_name end

4

2 回答 2

0

我认为这应该有效:

select (case when b.street_name='' and b.street_name is null 
        then c.street_name end)street_name
from family a, address b,adress2 c 
where 
case when b.street_name<>'' and b.street_name is not null then a.id_family=b.id_family and a.id_famiy=c.id_family
else  c.cve_col=b.cve=col
end
于 2013-09-09T21:03:02.063 回答
-1

关键是使用带有 OR 的 case 语句。请参阅下面的脚本...它可以在测试数据库中重新运行。

drop table family
drop table [address]
drop table adress2
go

CREATE Table family (
    id_family int 
    , familyName varchar(50) NOT NULL
)

CREATE TABLE [address] (
    id_family int
    , street_name varchar(50)
    )

CREATE TABLE adress2  (
    id_family int
    , cve_col varchar(50)
    )
GO

INSERT family(id_family, familyName)
SELECT 1, 'Jones'
UNION SELECT 2, 'Smith'
UNION SELECT 3, 'Brown'

INSERT [address] (id_family, street_name)
SELECT 1, 'Jones St.'
UNION SELECT 2, ''
UNION SELECT 3, NULL

INSERT adress2(id_family, cve_col)
SELECT 1, ''
UNION SELECT 2, 'smith pl.'
UNION SELECT 3, 'brown ln.'

SELECT a.familyName
    , street_name = CASE WHEN b.street_name is NULL OR b.street_name = '' THEN C.cve_col
            ELSE b.street_name
        END
FROM family a 
    INNER JOIN [address] b ON A.id_family = b.id_family
    INNER JOIN [adress2] C ON A.id_family = C.id_family
于 2013-09-09T21:59:52.850 回答