2013-12-20 47 views
0

我有问题我的情况建立查询:选择x FROM表WHERE

我已经表用户:

ID NAME CREDITS 

1 "AAA" 10000 

2 "BBB" 20000 

3 "CCC" 30000 

和表店:

ID ITEM_ID ACTIVE 

2 "table" true 

2 "chair" false 

1 "apple" true 

我想选择ID为ACTIVE的所有名称等于真,所以对于我的情况输出应该是:

"AAA" 
"BBB" 

我所做的:

SELECT NAME FROM user WHERE (SELECT DISTINCT ID FROM store WHERE ACTIVE=true); 

但首先是哪里不对......我觉得。你可以帮帮我吗?

感谢

回答

1

使用JOIN:

SELECT DISTINCT user.NAME 
FROM store 
JOIN user ON store.ID = user.ID 
WHERE ACTIVE = true 

我会补充说,你的问题表明,莫名其妙的用户ID的含义店铺ID,这似乎不大可能相同。更有可能你不应该比较这些ID列。

更可能的是,你不应该尝试加入这两个表。

+0

在我看来,这个查询应该优先于子查询。 +1 – Sebas

+0

我认为'DISTINCT user.NAME'被过度杀死? –

+0

@ user2310289这是在'store.ID'不是唯一的情况下。你是对的 - *希望*过度杀伤,但是由于这样的架构如此糟糕,你知道!? – Bohemian

1

试试这个

SELECT NAME FROM user WHERE ID in (SELECT DISTINCT ID FROM store WHERE ACTIVE=true); 

此外,由@Bohemian提到通常在一个表中ID场是指在该表中该记录的唯一标识符。所以User.ID风马牛不相及的Store.ID

+0

完美的作品,谢谢! – user3121183

相关问题