Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 这是:为什么“如果不匹配,则不返回行”和“隐式等于0”同时处于活动状态?它要么是无行,要么是基于隐式默认值的行。这或多或少是我针对单个状态提出的。我使用了cs的顺序。state是NULL DESC,我将OP的保留在中,尽管这个解决方案显然只在单个状态下才最_Sql_Database_Postgresql_Left Join - Fatal编程技术网

Sql 这是:为什么“如果不匹配,则不返回行”和“隐式等于0”同时处于活动状态?它要么是无行,要么是基于隐式默认值的行。这或多或少是我针对单个状态提出的。我使用了cs的顺序。state是NULL DESC,我将OP的保留在中,尽管这个解决方案显然只在单个状态下才最

Sql 这是:为什么“如果不匹配,则不返回行”和“隐式等于0”同时处于活动状态?它要么是无行,要么是基于隐式默认值的行。这或多或少是我针对单个状态提出的。我使用了cs的顺序。state是NULL DESC,我将OP的保留在中,尽管这个解决方案显然只在单个状态下才最,sql,database,postgresql,left-join,Sql,Database,Postgresql,Left Join,这是:为什么“如果不匹配,则不返回行”和“隐式等于0”同时处于活动状态?它要么是无行,要么是基于隐式默认值的行。这或多或少是我针对单个状态提出的。我使用了cs的顺序。state是NULL DESC,我将OP的保留在中,尽管这个解决方案显然只在单个状态下才最有意义,所以我完全同意您切换到=。是的,这对于我给出的所有测试用例都是正确的。不幸的是,如果(利益,状态)是(“B”,“LA”),那么它就失败了。看,这不像它的外表那么简单。这就是为什么我要做一个奇怪的加入。对不起,我不知道怎么会失败。在我看来


这是:为什么“如果不匹配,则不返回行”和“隐式等于0”同时处于活动状态?它要么是无行,要么是基于隐式默认值的行。这或多或少是我针对单个状态提出的。我使用了cs的
顺序。state是NULL DESC
,我将OP的
保留在
中,尽管这个解决方案显然只在单个状态下才最有意义,所以我完全同意您切换到
=
。是的,这对于我给出的所有测试用例都是正确的。不幸的是,如果(利益,状态)是(“B”,“LA”),那么它就失败了。看,这不像它的外表那么简单。这就是为什么我要做一个奇怪的加入。对不起,我不知道怎么会失败。在我看来它是有效的:因为从plans表返回的行的clip_state=0,而'LA'的clip_state为1。在这种情况下,它不应返回任何行。请阅读我的最新更新。对不起,它不正确。请参阅:它不应返回任何行。顺便说一句,一旦你有了解决方案,请与我的解决方案进行比较,因为我需要选择更好的解决方案。这适用于我能想到的所有测试用例。它与我的解决方案相比如何?(我不是db的人)恐怕帮不了你。我是开发人员,不是DBA。目前不太擅长查询调优/分析。此外,这是PostgreSQL,我从未使用过。(如果不是因为SQLFiddle,我实际上没有地方测试这个。)对不起。
CREATE TABLE plans
    (id int, benefit varchar(5), clip_state int);

INSERT INTO plans
    (id, benefit, clip_state)
VALUES
    (1, 'A', 1),
    (2, 'A', 0),
    (3, 'B', 0),
    (4, 'C', 0);

CREATE TABLE clip_states
    (state varchar(2), clip_state int);

INSERT INTO clip_states
    (state, clip_state)
VALUES
    ('LA', 1),
    ('FL', 0);
SELECT id, p.clip_state, benefit
FROM plans p
LEFT JOIN clip_states cs ON STATE IN ('LA')
WHERE benefit = 'A' AND
(p.clip_state = cs.clip_state OR (p.clip_state = 0 AND cs.clip_state IS NULL));
SELECT id, p.benefit, coalesce(cs.clip_state, 0) clip_state
FROM plans p
LEFT JOIN clip_states cs ON cs.clip_state=p.clip_state AND cs.state IN ('LA')
WHERE p.benefit = 'A';
SELECT * FROM stateview WHERE state='FL'
SELECT p.*
FROM   plans p
WHERE  p.benefit = 'A'
AND    NOT  EXISTS (
  SELECT 1
  FROM   clip_states cs
  WHERE  cs.state = 'LA'
  AND    cs.clip_state <> p.clip_state
  )
ORDER  BY p.clip_state
LIMIT  1;
SELECT p.*
FROM plans p
INNER JOIN (
  SELECT state, clip_state FROM clip_states
  UNION ALL
  (
  SELECT 'LA', 0
  EXCEPT
  SELECT state, 0 FROM clip_states
  )
) cs
ON p.clip_state = cs.clip_state
WHERE p.benefit = 'A'
  AND cs.state = 'LA'
;
SELECT *
FROM (
    SELECT DISTINCT id, clip_state, benefit
    FROM plans
    WHERE benefit = 'A') p
LEFT JOIN clip_states cs ON state IN ('LA')
WHERE (p.clip_state = cs.clip_state OR (p.clip_state = 0 AND cs.clip_state IS NULL));