我需要从设置表中检索所有默认设置,但如果存在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是默认值.
在这个候选答案中,断言它JOIN比LEFT JOIN在涉及某些WHERE子句的某些情况下更好,因为它不会混淆查询规划器并且不是"毫无意义".断言/假设是对任何人都应该是显而易见的.
请进一步解释或提供进一步阅读的链接.
我试图使用以下查询每天打开页面数.
SELECT day.days, COUNT(*) as opens
FROM day
LEFT OUTER JOIN tracking ON day.days = DAY(FROM_UNIXTIME(open_date))
WHERE tracking.open_id = 10
GROUP BY day.days
Run Code Online (Sandbox Code Playgroud)
我得到它的输出是这样的:
days opens
1 9
9 2
Run Code Online (Sandbox Code Playgroud)
问题是,在我的日历表中,我有一个包含数字1到30的列来表示一个月中的日期.我做了一个左外连接,我期待在天柱上显示所有日子!
但我的问题是这样做,为什么会这样呢?
谢谢大家的帮助.
我正在尝试用我的查询来完成某些事情,但它并没有真正起作用.我的应用程序曾经有一个mongo db,所以应用程序用于在一个字段中获取数组,现在我们不得不更改为Postgres,我不想更改我的应用程序代码以保持v1工作.
为了在Postgres中的1个字段中获取数组,我使用了array_agg()函数.到目前为止这个工作正常.但是,我正处于另一个不同表的字段中需要另一个数组的位置.
例如:
我有我的员工.员工有多个地址,有多个工作日.
SELECT name, age, array_agg(ad.street) FROM employees e
JOIN address ad ON e.id = ad.employeeid
GROUP BY name, age
Run Code Online (Sandbox Code Playgroud)
现在这对我来说很好,这将导致例如:
| name | age| array_agg(ad.street)
| peter | 25 | {1st street, 2nd street}|
Run Code Online (Sandbox Code Playgroud)
现在我想在工作日加入另一张桌子,所以我这样做:
SELECT name, age, array_agg(ad.street), arrag_agg(wd.day) FROM employees e
JOIN address ad ON e.id = ad.employeeid
JOIN workingdays wd ON e.id = wd.employeeid
GROUP BY name, age
Run Code Online (Sandbox Code Playgroud)
这导致:
| peter | 25 | {1st street, 1st street, 1st street, 1st …Run Code Online (Sandbox Code Playgroud) 我想在表中添加一个新列,以记录每个元组(行)的值为null的属性数.如何使用SQL获取数字?
例如,如果元组是这样的:
Name | Age | Sex
-----+-----+-----
Blice| 100 | null
Run Code Online (Sandbox Code Playgroud)
我想更新元组,如下所示:
Name | Age | Sex | nNULL
-----+-----+-----+--------
Blice| 100 | null| 1
Run Code Online (Sandbox Code Playgroud)
另外,因为我正在编写PL/pgSQL函数并且表名是从参数获得的,所以我事先并不知道表的模式.这意味着我需要使用输入表名更新表.有人知道怎么做吗?
我在Redshift.鉴于以下数据:
CREATE TABLE test (
id INT,
val1 INT,
val2 INT
);
INSERT INTO test VALUES
(1, 0, NULL),
(2, 0, NULL),
(3, 13, 1),
(4, 0, NULL),
(5, 0, NULL),
(6, 0, NULL),
(7, 0, NULL),
(8, 21, 2),
(9, 0, NULL),
(10, 143,3)
;
Run Code Online (Sandbox Code Playgroud)
我想用下面的第一个非空值填充缺失的val2值,例如
INSERT INTO results VALUES
(1, 0, 1),
(2, 0, 1),
(3, 13, 1),
(4, 0, 2),
(5, 0, 2),
(6, 0, 2),
(7, 0, 2),
(8, 21, 2),
(9, 0, 3),
(10,143,3)
; …Run Code Online (Sandbox Code Playgroud) 我从SQL Server获得的代码:
SELECT ESTAGIO.SK_ESTAGIO, ISNULL(count(ESTAGIO.SK_ESTAGIO), 0) as how_many
from ESTAGIO
left join ESTAGIARIO
on ESTAGIARIO.SK_ESTAGIO = ESTAGIO.SK_ESTAGIO
group by
ESTAGIO.SK_ESTAGIO
Run Code Online (Sandbox Code Playgroud)
当“ ESTAGIARIO”表中不存在“ ESTAGIO.SK_ESTAGIO”时,它返回1而不是0,我已经尝试使用ISNULL(),NULLIF()和COALESCE(),但仍然找不到造成该问题的方法上面的查询在应为0时返回1。