显示两个值的名称

时间:2017-04-09 17:37:59

标签: mysql

我正在尝试获取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。

1 个答案:

答案 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
    )