我有两个表,如果有关系的话,在PostgreSQL中有一对多的关系。我需要加入它们,以便对于每个“一个”,我只能从“许多”表中获得单个结果。不仅如此,我还需要从“许多”表中挑选出特定的结果。
TABLE_A
ID | NAME | DATE | MORE COLS....
1 | JOHN | 2012-01-10 | ....
2 | LIZA | 2012-01-10 | ....
3 | ANNY | 2012-01-10 | ....
4 | JAMES | 2012-01-10 | ....
...
TABLE_B
ID | CODE1 | CODE2 | SORT
1 | 04020 | 85003 | 1
1 | 04030 | 85002 | 4
2 | 81000 | 80703 | 1
3 | 87010 | 80102 | 4
3 | 87010 | 84701 | 5
4 | 04810 | 85003 | 1
4 | 04030 | 85002 | 4
4 | 04020 | 85003 | 1
...
QUERY RESULT
ID | NAME | DATE | CODE1 | CODE2
1 | JOHN | 2012-01-10 | 04020 | 85003
2 | LIZA | 2012-01-10 | 81000 | 80703
3 | ANNY | 2012-01-10 | 87010 | 80102
4 | JAMES | 2012-01-10 | 04810 | 85003
...
TABLE_B中的SORT列实际上是CODE2中的最后一个字符。CODE2可以以1-9结尾,但是3最重要,那么5、7、4、2、1、0、6、8、9因此3->
1,5-> 2,7-> 3等等向前。
我面临的问题是我需要TABLE_B中的行,其中sort是最低的数字。在某些情况下,存在多个最低的情况(请参见TABLE_B中的ID =
4),那么选择哪个具有最低ID的行并不重要,只有该ID有一个结果。
PostgreSQL的更简单,更短,更快DISTINCT ON
:
SELECT DISTINCT ON (a.id)
a.id, a.name, a.date, b.code1, b.code2
FROM table_a a
LEFT JOIN table_b b USING (id)
ORDER BY a.id, b.sort
此紧密相关答案中的详细信息,解释,基准和链接。
我使用LEFT JOIN
,这样不会删除table_a
没有匹配行的行table_b
。
旁注:
虽然在PostgreSQL中被允许,但date
用作列名是不明智的。在每个SQL标准中,它都是保留字,在PsotgreSQL中,它是类型名。
命名ID列也是一种反模式id
。没有描述性,也没有帮助。一种(多种)可能的命名约定是在表作为主键的情况下对其进行命名table_a_id
。引用它的外键使用相同的名称(如果没有其他自然名称优先)。
问题内容: 我正在使用Laravel 4,我需要在MySQL表中插入一些行,并且需要找回插入的ID。 对于单行,我可以使用,但是它不支持多行。如果我至少能像普通的MySQL一样检索第一行的ID,就足以找出其他的ID。 问题答案: 根据用户Xrymz的建议,返回第一个。 根据Schemaapi 接受数组 所以你必须能够 就是说,如果使用MySQL,则可以由此检索第一个ID并计算其余的ID。还有一个功
我已经在我的Laravel应用程序中实现了ZendSearch。我使用它作为我的搜索引擎,用户将键入一个搜索词,然后将返回一个按相关性排序的结果数组。但是,返回的数组只返回我的记录ID(它不返回任何实际的记录信息)。 接下来查询我的模型以基于数组结果检索结果的正确方法是什么?该数组结果只是一个基于相关性排序的ID数组。 我知道会返回ID为1的记录,但我如何向方法提供我希望按给定顺序返回的ID数组。
问题内容: 我一直在尝试遵循Celery的“ Celery第一步与后续步骤”指南。我的设置是Windows 7 64位,Anaconda Python 2.7(32位),已安装的Erlang 32位二进制文件,RabbitMQ服务器和celery(带有)。 按照指南,我创建了一个带有 init .py,tasks.py和celery.py的proj文件夹。我的 init .py是空的。这是ce
我有一个Laravel 5.8项目,我需要加入3个表来显示一些结果。 基本上,我已经将所有自定义id存储在一个名为的表中。 例如,这里有两个自定义ID,我需要检索它们的: 所以我试了一下: 但这是错误的,并向我展示了错误: SQLSTATE[42000]:语法错误或访问冲突:1066不唯一 所以我需要这样说: 然后: 我该怎么做呢?
问题内容: 我在Java中有这样的双重经历。 现在,我想做的是通过循环在列表的零索引中添加5个值,在索引1中添加5个值。 第零个索引将具有值 索引1将具有值 并且所有这些值都按以下顺序存储在双精度数组中 我该怎么做? 问题答案: @Ahamed有一点,但是如果您坚持使用列表,那么可以有三个这样的arraylist: 编辑: 如果您在下面的列表中有这些值: 你想做的就是把它们结合起来,对吗?您可以尝
问题内容: 这很难解释,但我会尽力而为。 我有2个具有多对多关系的桌子;有一个定义关系的链接表。这些表分别命名为Question,QuestionTopic和Topic。主题具有字段TopicID和TopicName.Question具有字段QuestionID和QuestionText。 我想检索主题列表以及属于该主题的问题数量。但是,可以将主题归为一组,并且应该知道该组合所独有的问题数。举个例