【问题标题】:How to make sql (postgresql) query?如何进行 sql (postgresql) 查询?
【发布时间】:2017-10-17 17:16:27
【问题描述】:
/* Create a table called tbl1 */
CREATE TABLE tbl1(id integer PRIMARY KEY, name text, lang text);

/* Create few records in this table */
INSERT INTO tbl1 VALUES(1,'John', 'Perl');
INSERT INTO tbl1 VALUES(2,'Pete', 'Perl');
INSERT INTO tbl1 VALUES(3,'Sam', 'Java');
INSERT INTO tbl1 VALUES(4,'John', 'Php');
INSERT INTO tbl1 VALUES(5,'Sam', 'Perl');
INSERT INTO tbl1 VALUES(6,'Sam', 'Php');
INSERT INTO tbl1 VALUES(7,'Pete', 'C');
INSERT INTO tbl1 VALUES(8,'Bob', 'Java');

推导出知道 Perl 和 Php 的人的名字。

【问题讨论】:

  • 你尝试过什么吗?
  • 首先,规范化你的数据...
  • 将有大约 20-30 个可行的答案,从枢纽到半hacky。不过,这似乎是家庭作业,您可能应该尝试学习答案。
  • 规范化我的数据?)任务是正确的,马特
  • 第十二,请告诉我你的答案。我找到了 1 个解决方案,但我想查看另一个解决方案。

标签: sql postgresql


【解决方案1】:

OP 包含的信息非常少。这是你需要的吗?

SELECT Name
FROM tbl1
WHERE lang = 'Perl' AND lang = 'Php'

供日后参考;你真的应该提供一个最小的工作示例,就像你在这里所做的那样,还有你实际尝试过的,你缺少的。

如果您需要此查询,那么它非常简单,您的问题应该可以通过谷歌搜索几分钟来解决。

【讨论】:

  • 否,此查询返回 0 行
  • 必须返回姓名“Sam”和“John”。
  • lang = 'Perl' AND lang = 'Php' 永远不会是真的
【解决方案2】:
SELECT distinct(name)
FROM tbl1
WHERE name IN (SELECT name FROM tbl1 WHERE lang = 'Perl')
  AND name IN (SELECT name FROM tbl1 WHERE lang = 'Php');

这是个好答案吗?我不这么认为。 我想找到更好的方法。

2 个附加答案

SELECT n FROM (
  SELECT tbl1.name, string_agg(tbl1.lang, '-')
  FROM tbl1
  GROUP BY name) AS t (n, l)
WHERE
  position('Perl' in l) <> 0
AND
  position('Php' in l) <> 0;

====================================

SELECT t1.name FROM (
  SELECT name FROM tbl1 WHERE lang = 'Perl'
) AS t1, (
  SELECT name FROM tbl1 WHERE lang = 'Php'
) AS t2
WHERE t1.name = t2.name; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    • 2019-07-21
    相关资源
    最近更新 更多