2017-05-30 47 views
1

我被打了一下,使用SQLite嵌套查询和遇到以下问题:它看起来是不可能的窝having子句SQL/SQlite的在having子句

子查询当我尝试调用查询搭配:

... having count(select * from produkt) > 1 

我得到的错误:

OperationalError: near "select": syntax error

在执行

... having count(1) > 1 

一切都很好

你有任何解决方法吗?

EDIT2:

我想这样写:

select distinct standort.name, standort.ort 
from produktion 
    join standort on id_standort = standort.id 
    join produkt on id_produkt = produkt.id 
where produkt.gewicht < 1 

EXCEPT 

select distinct standort.name, standort.ort 
from produktion 
    join standort on id_standort = standort.id 
    join produkt on id_produkt = produkt.id 
where produkt.kategorie = "Spiel" 

在一个更优雅的方式,使用 “具有”

欢呼和感谢!

WOJTEK

+0

包括在讨论中的查询,为文本。您有足够的知名度来知道问题应该完整,而不是引用异地页面(除了其他有用的信息)。 –

+0

@GordonLinoff好的,我只是觉得使用交互式jupyter笔记本会比较容易 – wklm

+0

我想我不明白你选择语句的意图。我读到的是,您正在从生产中进行选择,按standort进行分组,但如果produkt表为空,则不希望返回任何重新分配。但是我认为你可能会说的是“从产品中选择,按照排序分组,但排除没有匹配产品的任何组合”是的? – bit2know

回答

1

我不知道你会做这个什么情况下,但是这是语法正确:

having (select count(*) from produkt) > 1 

编辑:

为您的实际问题,这个查询比较简单:

select s.name, s.ort 
from produktion pn join 
    standort s 
    on pn.id_standort = s.id join 
    produkt p 
    on pn.id_produkt = p.id 
group by s.name, s.ort 
having sum(case when p.gewicht < 1 then 1 else 0 end) > 0 and 
     sum(case when p.kategorie = 'Spiel' then 1 else 0 end) = 0; 

This returns all s.name/s.ort具有小于1的“gewicht”并且没有称为'Spiel'的“kategorie”的组合。

2

我觉得这适合你的意图比你目前的选择

SELECT ... 
FROM Standort 
    JOIN produktion ... 
    JOIN produkt ... 
WHERE product.kategorie != "Spiel" AND produkt.gewicht > 1 
+0

这是不一样的东西。这假定这些值在同一行中。所以,我明白答案,但不是赞扬。 –

+0

你是什么意思“值在同一行”?这是一个内部连接 – bit2know

+0

每个'standort.name,standort.ort'组合可以出现在多行上。 'kategorie'条件和'gewicht'条件可以在不同的行上(由'inner join'产生)。 –