相关疑难解决方法(0)

左边加入Where子句

我需要从设置表中检索所有默认设置,但如果存在x字符,还需要获取字符设置.

但是此查询仅检索字符= 1的那些设置,而不是用户未设置任何人的默认设置.

SELECT `settings`.*, `character_settings`.`value`
FROM (`settings`)
LEFT JOIN `character_settings` 
ON `character_settings`.`setting_id` = `settings`.`id`
WHERE `character_settings`.`character_id` = '1'  
Run Code Online (Sandbox Code Playgroud)

所以我应该需要这样的东西:

array(
    '0' => array('somekey' => 'keyname', 'value' => 'thevalue'),
    '1' => array('somekey2' => 'keyname2'),
    '2' => array('somekey3' => 'keyname3')
)
Run Code Online (Sandbox Code Playgroud)

其中,当键0包含具有字符值的默认值时,键1和键2是默认值.

sql left-join where-clause

142
推荐指数
3
解决办法
32万
查看次数

使用LEFT JOIN查询不返回计数为0的行

我试图让以下内容为PostgreSQL中使用左连接的每个组织返回一个计数,但我无法弄清楚为什么它不起作用:

  select o.name as organisation_name,
         coalesce(COUNT(exam_items.id)) as total_used
  from organisations o
  left join exam_items e on o.id = e.organisation_id
  where e.item_template_id = #{sanitize(item_template_id)}
  and e.used = true
  group by o.name
  order by o.name
Run Code Online (Sandbox Code Playgroud)

使用coalesce似乎不起作用.我的智慧结束了!任何帮助肯定会受到赞赏!

为了澄清什么不起作用,目前查询只返回计数大于0的组织的值.我希望它为每个组织返回一行,而不管计数如何.

表定义:

TABLE exam_items
  id serial NOT NULL
  exam_id integer
  item_version_id integer
  used boolean DEFAULT false
  question_identifier character varying(255)
  organisation_id integer
  created_at timestamp without time zone NOT NULL
  updated_at timestamp without time zone NOT NULL
  item_template_id integer
  stem_id integer
  CONSTRAINT exam_items_pkey PRIMARY …
Run Code Online (Sandbox Code Playgroud)

sql postgresql count left-join

31
推荐指数
2
解决办法
3万
查看次数

左连接未显示所有左表值

LEFT JOIN应显示左表中的所有行,但是在运行以下查询时,我只获取位数为1或更多的位置值.请有人给我一些关于我可能出错的地方的指导:

SELECT places.placeId,
       placeName,
       COUNT(orderId) AS orderCount
FROM   places
       LEFT JOIN orders
         ON places.placeId = orders.placeId
WHERE  places.companyId = 1
       AND stateId = 1
       AND orderstateId = 1
       AND orderName NOT LIKE 'Delivery%'
GROUP  BY places.placeId,
          places.placeName
ORDER  BY orderCount DESC,
          placeName ASC 
Run Code Online (Sandbox Code Playgroud)

提前致谢

sql join left-join

6
推荐指数
1
解决办法
1万
查看次数

SQL-之间的联接与之间的联接

几周前,我做了一个查询(不记得要做什么),它涉及到BETWEEN运算符。刚开始,我在WHERE子句中使用了它,但是它没有产生正确的结果集(再次,我不记得问题出在哪里)。我考虑了为什么,最后得出结论,我不得不将其移至该JOIN条款。

例如

“原始”查询:

SELECT --something
FROM table1 a
/*type of*/ JOIN table2 b ON a.field = b.field
WHERE b.field2 BETWEEN a.field2 AND a.field3 /*some other conditions*/
Run Code Online (Sandbox Code Playgroud)

修改后的查询:

SELECT --something
FROM table1 a
/*type of*/ JOIN table2 b ON a.field = b.field 
                       AND b.field2 BETWEEN a.field2 AND a.field3
WHERE /*some other conditions*/
Run Code Online (Sandbox Code Playgroud)

JOIN版本相比,该版本返回的结果集较小WHERE,并且该JOIN版本产生了正确的结果集,而WHERE没有。

我现在要问的原因是因为当时我什么都没想到,但是今天老板问我为什么要这样做(针对完全不同的查询),我告诉他我上次做过的经历,两者他和我对这两种用法之间的差异很感兴趣。

从我的观点来看,为什么一个版本产生与另一个WHERE版本不同的原因是,子句版本仅选择了一系列数据,而该JOIN版本则寻找了一系列要连接的数据。是这样吗 或者,我确实遇到了受其余查询影响的独特体验(查询比示例复杂得多)。

编辑 我不同意可能的重复内容,因为我的内容专门针对该BETWEEN …

sql sql-server join between where

5
推荐指数
1
解决办法
2万
查看次数

SQL在JOIN条件中使用过滤器与WHERE子句中的过滤器保持连接

我在工作中重构一些sql,偶然发现了一些我不确定如何解释的东西.我认为有两个查询会产生相同的结果,但不会,我不知道为什么.

查询如下:

select *
from TableA as a
left join TableB b on a.id = b.id and b.status in (10, 100)

select *
from TableA as a
left join TableB b on a.id = b.id
where b.status is null or b.status in (10, 100)
Run Code Online (Sandbox Code Playgroud)

什么时候这些不会返回相同的结果?

sql t-sql sql-server join outer-join

4
推荐指数
2
解决办法
1261
查看次数

左连接和连接条件中的 where 条件

我正在使用 Ingres 11.0 DB 不确定它是否会在其他 DB 引擎上具有相同的行为,但就是这样

 SELECT * 
 FROM table1 t1
 LEFT JOIN table2 t2
   ON t1.id = t2.fk_id 
 WHERE t1.code = 'CODE1' AND t2.id_number = 12174;
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

不返回表 1 中的所有记录,但我使用的是左连接,它应该从 T1 返回 aa 记录,并且只从 t2 返回行,只返回 1 条记录

如果我将一个条件从 where 子句移到加入条件,它的开始返回我正是我期待的

SELECT *
FROM TABLE1 t1
LEFT JOIN TABLE2 t2
  ON  t1.id = t2.fk_id 
  AND t2.id_number = 12174
WHERE t1.code = 'CODE1'; 
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

问题是为什么它在 where 子句中的所有搜索条件都不起作用,但是当我从 where 移动 t2.id_number 加入条件时起作用?

我想我知道答案,因为我在加入步骤中消除了 t2 中所有可能的变化,但现在不确定

sql join ingres left-join

1
推荐指数
1
解决办法
9211
查看次数

LEFT JOIN查询不返回第一个表中的所有行

使用管理工作室SQL Server 2008 R2.

尝试做一个LEFT JOIN,我需要返回第一个表中的所有行,无论行能够与第二个表绑定.不确定我是否正确解释.

这就是我现在所得到的:

select a.id, a.name, b.store, b.stock
from products a left join stock b
on a.id = b.id
where b.store = '001'
order by a.id
Run Code Online (Sandbox Code Playgroud)

我需要查询返回公司销售的所有产品,并在商店中显示它的库存001.

但它现在的方式只会显示存储中提到产品库存的行001.

所以,基本上,0如果001没有提到商店,我需要查询返回库存.

所有只有库存商品的产品也002需要列出,并附有0库存.

sql left-join

0
推荐指数
1
解决办法
3531
查看次数

WHERE 子句忽略 LEFT OUTER JOIN 中的行

我有三张表:

clinic = (id,name,short_name,region,country,continent,area) 
result_month =(id,year,result_quarter_id,month)
test_value_in_range_count =(clinic_id,result_month_id,patient_sub_set_id,test_value_range_id,number_of_values)
Run Code Online (Sandbox Code Playgroud)

样本数据:

诊所

id      region      country     continent   area    
3299    Kazakhstan  Kazakhstan  Eurasia     Middle East/Asia
Run Code Online (Sandbox Code Playgroud)

结果月

id      year    result_quarter_id   month   
200801  2008    2008Q1              1    
Run Code Online (Sandbox Code Playgroud)

test_value_in_range_count

诊所表中没有诊所 ID 3299 的数据。但是 JOINS 必须返回

我需要让result_month表中的所有行都带有test_value_in_range_count 中的空值。问题是WHERE条款。这将停止生成行,因为从result_monthtest_value_range_id 的某些行显然不存在数据。

预期结果

clinic  region      country     continent   area                ym     vf
3299    Kazakhstan  Kazakhstan  Eurasia     Middle East/Asia    201511 null
Run Code Online (Sandbox Code Playgroud)

我通过拆分它们尝试了很多各种查询,但没有运气。任何帮助或指导将不胜感激。

     SELECT
          apc.id AS clinic,
          apc.region,
          apc.country,
          apc.continent,
          apc.area,
          vrm.id AS ym,

        SUM(CASE …
Run Code Online (Sandbox Code Playgroud)

sql sql-server left-join outer-join where-clause

0
推荐指数
1
解决办法
519
查看次数

SQL 使用 where 子句离开 JOIN 不返回所有结果

我有 2 个使用 ID 加入的表。如果该 ID 在表 #2 中,我希望主表中的所有数据都显示并匹配,以在我的输出中显示更多列。目前与

select table1.id, table1.name, table1.phone, table1.address, 
table2.loyalcustomer, table2.loyaltynumb, table2.loyaltysince from table1
left join table2
ON table1.id = table2.table1id
Run Code Online (Sandbox Code Playgroud)

我想做的是同样的事情,但在 table2.loyalcustomer != 'Yes' 中添加一个 WHERE 子句。当我这样做时,它不会返回我的主表(table1)中的所有数据,而是只显示 table1 和 table2 之间的匹配项。此外,table2 没有所有信息,只有插入表中的信息。

select table1.id, table1.name, table1.phone, table1.address, 
table2.loyalcustomer, table2.loyaltynumb, table2.loyaltysince from table1 
left join table2
ON table1.id = table2.table1id
WHERE table2.loyalcustomer != 'Yes'
Run Code Online (Sandbox Code Playgroud)

一直在阅读不同的连接,但我一直在阅读的是我的 where 语句可能与我的连接相矛盾,我不知道如何解决这个问题。

SQL 数据库:Postgres

postgresql left-join

0
推荐指数
1
解决办法
1950
查看次数