Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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 在一列中选择可选数量的值_Sql_Postgresql - Fatal编程技术网

Sql 在一列中选择可选数量的值

Sql 在一列中选择可选数量的值,sql,postgresql,Sql,Postgresql,我试图了解,当满足某个条件时,是否可以在别名中查询多个值,而当满足另一个条件时,是否可以插入一个值。我想看看这在不做子查询的情况下是否可行 我正在使用postgreSQL 11,我最近开始学习SQL 为了便于实践,我使用了SQLZOO中的一个示例,涉及3个单独的表- cats (id, name, color, breed) toys (id, name, price, color) cattoys (id, cat_id, toy_id) 我已经为这些表创建了自己的数据,我想看看是否有可能在

我试图了解,当满足某个条件时,是否可以在别名中查询多个值,而当满足另一个条件时,是否可以插入一个值。我想看看这在不做子查询的情况下是否可行

我正在使用postgreSQL 11,我最近开始学习SQL

为了便于实践,我使用了SQLZOO中的一个示例,涉及3个单独的表-

cats (id, name, color, breed)
toys (id, name, price, color)
cattoys (id, cat_id, toy_id)
我已经为这些表创建了自己的数据,我想看看是否有可能在不进行子查询的情况下,在一个列中包含任何特定颜色的内容(猫或玩具)

在我使用的数据中,每个表中有5行。检验-

'Garfield' is the only 'orange' cat
'hay' and 'yarn' are the only 'orange' toys
'Garfield' has both hay and yarn (the only toys for Garfield)
'Ozzie' has yarn (the only toy for Ozzie)
是否可以运行一个查询,结果类似于:

 orange_stuff 
--------------
 Garfield
 hay
 yarn
我已经很接近了,但是我无法把我的案例陈述写下来,如果cats.color和toys.color都是“橙色”的话,那么将这两个项目插入我的别名“orange_stuff”

第一次尝试:

SELECT
CASE 
WHEN cats.color = 'orange' AND toys.color = 'color' THEN cats.name, toys.name
WHEN cats.color = 'orange' THEN cats.name
WHEN toys.color = 'orange' THEN toys.name
END AS orange_stuff
FROM
    cats 
JOIN
    cattoys ON cattoys.cat_id = cats.id
JOIN
    toys ON toys.id = cattoys.toy_id
WHERE
    cats.color = 'orange' OR toys.color= 'orange';
这将不起作用,因为尝试在第一个WHEN语句中返回两个参数时出错

备选方案:

SELECT
CASE 
WHEN cats.color = 'orange' THEN cats.name
WHEN toys.color = 'orange' THEN toys.name
END AS orange_stuff
FROM
    cats 
JOIN
    cattoys ON cattoys.cat_id = cats.id
JOIN
    toys ON toys.id = cattoys.toy_id
WHERE
    cats.color = 'orange' OR toys.color= 'orange';
这几乎可以达到目的,但是案例陈述的设置方式是,当它选择“加菲猫”而不是玩具时

如果可能的话,希望在没有子查询的情况下获得:

 orange_stuff 
--------------
 Garfield
 hay
 yarn

如果您只需要知道橙色的东西,它们之间没有任何关系,我认为一个简单的union all(或union)查询可以产生以下结果:

SELECT name AS orange_stuff
FROM cats
WHERE color = 'orange'
UNION ALL
SELECT name AS orange_stuff
FROM toys 
WHERE color = 'orange'

如果您只需要知道橙色的东西,它们之间没有任何关系,我认为一个简单的union all(或union)查询可以产生以下结果:

SELECT name AS orange_stuff
FROM cats
WHERE color = 'orange'
UNION ALL
SELECT name AS orange_stuff
FROM toys 
WHERE color = 'orange'

我觉得问题是:如何得到猫和玩具都是橙色的所有猫和玩具?我觉得问题是:如何得到猫和玩具都是橙色的所有猫和玩具?