请检查http://sqlfiddle.com/#!18/1acd1/2
我通过UserId获取用户的countryid,以便根据用户的国家/地区获取计划。
我有针对各个国家/地区的计划,但我没有为所有国家/地区制定计划,所以当我通过用户ID时,我目前还没有针对该用户/国家/地区的任何计划,但没有任何行返回但是我需要向该用户显示默认计划(具有国家ID =' 1'的计划)。
请注意小提琴,如果是userid =' 4'没有行返回所以在这种情况下我需要向该用户显示默认计划。所有默认计划都有countryid = 1
我希望你理解我的问题:)谢谢
答案 0 :(得分:1)
这是我的看法。
我采用了不同的方法并从tblProfile
开始,因为您对此查询的输入实际上是UserId
所以我发现遵循此过程更合乎逻辑:
UserId
,请抓取PlanId
CountryId
CountryId
中没有用户lstCountry
或PlanId
没有CountryId
,请使用默认CountryId=1
替换用户CountryId
(如下面的评论所述)CREATE TABLE lstCountry(
CountryID int,
CountryTitle varchar(100),
CurrencyCode varchar(3))
INSERT INTO lstCountry (CountryId, CountryTitle, CurrencyCode) VALUES
(1, 'USA', 'USD'),
(2, 'GB', 'GBP'),
(3, 'France', 'EUR')
CREATE TABLE tblProfile(
UserId int,
CountryId int)
INSERT INTO tblProfile (UserId, CountryId) VALUES
(1, 1),
(2, 2),
(3, 3),
(4, 4)
CREATE TABLE tblPlan (
PlanId int,
PlanTitle nvarchar(50),
PlanPrice money,
CountryId int)
INSERT INTO tblPlan (PlanId, PlanTitle, PlanPrice, CountryId) VALUES
(1, 'PlanDefault', 10, 1),
(2, 'Plan2', 20, 2),
(3, 'Plan3', 30, 3),
(4, 'PlanDefault', 40, 1),
(5, 'Plan5', 50, 2)
表格定义
select distinct f.PlanId,
f.PlanTitle,
f.PlanPrice,
e.CurrencyCode
from (
select case when c.PlanId is null then '1' else a.CountryId end as CountryId
from tblProfile a
left join lstCountry b on a.CountryId=b.CountryId
left join tblPlan c on b.CountryId=c.CountryId
where UserId=4
) d
inner join lstCountry e on d.CountryId=e.CountryId
inner join tblPlan f on d.CountryId=f.CountryId
<强>查询强>
UserId=1
| PlanId | PlanTitle | PlanPrice | CurrencyCode |
|--------|-------------|-----------|--------------|
| 1 | PlanDefault | 10 | USD |
| 4 | PlanDefault | 40 | USD |
的结果:
UserId=2
| PlanId | PlanTitle | PlanPrice | CurrencyCode |
|--------|-----------|-----------|--------------|
| 2 | Plan2 | 20 | GBP |
| 5 | Plan5 | 50 | GBP |
UserId=3
| PlanId | PlanTitle | PlanPrice | CurrencyCode |
|--------|-----------|-----------|--------------|
| 3 | Plan3 | 30 | EUR |
UserId=4
| PlanId | PlanTitle | PlanPrice | CurrencyCode |
|--------|-------------|-----------|--------------|
| 1 | PlanDefault | 10 | USD |
| 4 | PlanDefault | 40 | USD |
"wasdsadas" : {
"asignatura" : 6,
"nivel" : 2,
"unidad" : [ [ {
"OA" : 1,
"indicadores" : [ "Testing", "testeo2" ],
"objetivo" : "Testeo"
} ], [ {
"OA" : 2,
"indicadores" : [ "testing", "testeo2" ],
"objetivo" : "testeo 2"
} ] ]
}
这是SQL小提琴 http://sqlfiddle.com/#!18/7068c/8/0
答案 1 :(得分:0)
我认为表的LEFT JOIN
和第二个解析可能会实现这一点。如果没有,那么请查看@JuanCarlosOropeza评论并使用样本和预期数据更新您的帖子。
SELECT p.PlanId,
p.PlanTitle,
p.PlanPrice,
ISNULL(c.CurrencyCode, d.CurrencyCode) AS CurrencyCode
FROM tblPlan p
LEFT JOIN lstCountry c ON c.CountryId = p.CountryId
LEFT JOIN lstCountry d ON c.CountryId IS NULL
AND d.CountryId = 226
WHERE P.CountryId = (SELECT sq.CountryId
FROM tblProfile sq --Not sure if this requires a Default Country
WHERE UserId = @UserId)
AND p.IsVisible = '1';