【问题标题】:mysql inner join with count query带有计数查询的mysql内部连接
【发布时间】:2012-07-09 19:20:09
【问题描述】:

我有以下查询来提取属性。属性有多个单位。我不知道如何使用至少 1 个单位提取属性。单元通过具有相同的“团队”连接到属性。 “团队”是一个 varchar(例如“jkdgsl”)。有什么建议么?

SELECT DISTINCT Properties.id, Properties.title, Properties.team
FROM Properties
INNER JOIN Units ON Units.team = Properties.team 
AND Units.rates != '0' 
AND Properties.deleted =  '0000-00-00 00:00:00'
AND Properties.zip_code
IN (
'77808',  '77845'
)
AND Properties.public =  '1'
ORDER BY FIELD( Properties.zip_code,  '77808',  '77845' ) 
LIMIT 0 , 30

【问题讨论】:

  • 在我看来,您的查询已经有效并提取了您需要的属性,因为在 propertiesunits 之间的 INNER JOIN 基本上会排除所有没有相应行的属性units,从而提取至少 1 个单位的属性。但是,如果您只想提取具有 2 个或更多单位的属性,那就另当别论了,您可能需要在子选择中使用 GROUP BYHAVING

标签: mysql sql count inner-join


【解决方案1】:

我认为由于内部连接的性质,您已经在这样做(即选择具有至少一个单元的属性)。

【讨论】:

  • 这是答案还是评论?
  • @FranciscoSpaeth:伙计,你们都对这个观察感到疯狂。这显然是一个答案,因为它出现在答案部分。如果你问我应该是评论还是答案,我的逻辑告诉我应该是答案,因为它回答了他的问题
【解决方案2】:

我同意@Razvan 如果您还想要单位数,请使用:

SELECT DISTINCT Properties.id, Properties.title, Properties.team, COUNT(Units.<em>someOTHERcolumn</em>)
FROM Properties
INNER JOIN Units ON Units.team = Properties.team 
AND Units.rates != '0' 
AND Properties.deleted =  '0000-00-00 00:00:00'
AND Properties.zip_code
IN (
'77808',  '77845'
)
AND Properties.public =  '1'
GROUP BY Properties.id ORDER BY FIELD( Properties.zip_code,  '77808',  '77845' ) 
LIMIT 0 , 30

【讨论】:

    【解决方案3】:

    如果只有一个或多个,您可以使用COALESCE

    WHERE COALESCE( Properties.id, Properties.title, Properties.team ) IS NOT NULL
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-30
      • 2016-06-11
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      • 2022-10-01
      相关资源
      最近更新 更多