我需要从设置表中检索所有默认设置,但如果存在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是默认值.
我试图让以下内容为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) 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)
提前致谢
几周前,我做了一个查询(不记得要做什么),它涉及到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,偶然发现了一些我不确定如何解释的东西.我认为有两个查询会产生相同的结果,但不会,我不知道为什么.
查询如下:
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)
什么时候这些不会返回相同的结果?
我正在使用 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 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库存.
我有三张表:
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_month到test_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) 我有 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
sql ×8
left-join ×7
join ×4
sql-server ×3
outer-join ×2
postgresql ×2
where-clause ×2
between ×1
count ×1
ingres ×1
t-sql ×1
where ×1