我正在尝试获取SQL代码,但无法确定如何执行此操作,因此我将解释我想要的内容。
我有4个名为Person,Customer,Adres和Store的表。现在我必须向每个客户显示NAMES,这些NAMES与存储商店位于同一个城市。首先,我通过以下方式确定了哪些人是客户:
SELECT Store_name, adres_city
FROM store s, adres a
WHERE s.Adres_Adres_Id = a.adres_id;
哪个商店位于哪个城市:
def parsing_input(string_brackets):
stack=[]
counter = -1
for character in string_brackets:
if character == '(':
counter += 1
stack.append('')
elif character==')':
if len(stack[counter]) > 0 and stack[counter][-1:] != ',':
stack[counter] += ','
counter -= 1
else:
stack[counter] += character
return stack
请注意,person_person_id与person_id相同,就像fk一样。
我对此代码感到困惑,并且不知道如何从这里走得更远。我的列名为adres = adres_city。
答案 0 :(得分:1)
好的,如果我意识到你想要什么,试着这样做:
select --distinct
b.Adres_City,
a.person_id
from
dbo.Person a
join dbo.Adres b on a.adres_adres_id = b.Adres_Id
join dbo.Customer c on a.person_id = c.Person_Person_Id
join dbo.Store d on b.Adres_Id = d.Adres_Adres_Id
如果您不确定,那么表中的所有键都是uniq,取消注释 - 在第一个字符串中不存在。
或者,如果您想了解您所在城市的统计数据,请执行以下操作:
select
b.Adres_City,
count(distinct a.person_id) as cnt
from
dbo.Person a
join dbo.Adres b on a.adres_adres_id = b.Adres_Id
join dbo.Customer c on a.person_id = c.Person_Person_Id
join dbo.Store d on b.Adres_Id = d.Adres_Adres_Id
group by b.Adres_City
如果有帮助,请告诉我。
UPDATE1:
select --distinct
b.Adres_City,
a.person_id
from
dbo.Person a
join dbo.Adres b on a.adres_adres_id = b.Adres_Id
join dbo.Customer c on a.person_id = c.Person_Person_Id
where
b.Adres_City in (
select y.Adres_City
from dbo.Store x join dbo.Adres y on y.Adres_Id = x.Adres_Adres_Id
)