SQL:在一个表中的同一字段中查找另一个表中的多个值?
(不确定这个问题的名称是否真的有意义,但我想做的很简单) 给定如下所示的表:SQL:在一个表中的同一字段中查找另一个表中的多个值?,sql,postgresql,Sql,Postgresql,(不确定这个问题的名称是否真的有意义,但我想做的很简单) 给定如下所示的表: Table Foo --------------------------------- | bar1_id | bar2_id | other_val | --------------------------------- Table Bar -------------------- | bar_id | bar_desc| -------------------- 如何创建一个select以返回如下所示的表: -
Table Foo
---------------------------------
| bar1_id | bar2_id | other_val |
---------------------------------
Table Bar
--------------------
| bar_id | bar_desc|
--------------------
如何创建一个select以返回如下所示的表:
---------------------------------------------------------
| bar1_id | bar1_desc | bar2_id | bar2_desc | other_val |
---------------------------------------------------------
i、 我想从Foo中获取每一行,并添加一列,其中包含来自bar的bar\u id的描述。所以,可能有来自Bar的一些行不在结果集中,但Foo的每一行都应该在结果集中
此外,这是博士后,如果这有区别的话
SELECT
foo.bar1_id, bar1.bar_desc AS bar1_desc,
foo.bar2_id, bar2.bar_desc AS bar2_desc,
foo.other_val
FROM
foo
INNER JOIN bar bar1 ON bar1.id = foo.bar1_id
INNER JOIN bar bar2 ON bar2.id = foo.bar2_id
这假设您在
foo
中始终同时拥有bar1\u id
和bar2\u id
。如果这些可以是null
,那么将内部连接更改为左侧外部连接
,这不会直接回答您的问题(但没关系,上面的人已经有了),但是
select f.bar1, b1.desc, f.bar2, b2.desc, f.value
from foo as f, bar as b1, bar as b2
where f.bar1 = b1.id
and f.bar2 = b2.id
这被认为是非常糟糕的设计。当你的foo可以与3个条相关联时,将来会发生什么?还是更多?(不要说这永远不会发生。我已经记不清这些年来我实施了多少“这永远不会发生”的事情)
通常正确的方法是建立一对多关系(每个条都指向一个foo,或者中间的foo-to-bar表,请参见)。现在,您可以在前端正确设置输出格式,只需为每个foo获取一个条列表,并将其传递给它(在SQL中很容易做到)。报告是一种特殊情况,但使用数据透视或其他方法仍然相对容易完成。我会尝试使用information\u schema.colums表
SELECT concat(table_name,'_',column_name)
FROM information_schema.columns WHERE table_name = bar1 OR table_name = bar2
into new_table
然后您可以填充它
将foo作为从bar1中选择*
或者选择进入我的身份发生了什么变化(在代码前面加四个空格(有一个按钮可以快速完成:选择代码,然后按CTRL-K键)我很清楚设计的含义。我没有创建这些表,我只是处理其他人创建的数据库。而且,在这种情况下,Foo真的不可能变大,因为它描述的结构本质上是双面的。
SELECT concat(table_name,'_',column_name)
FROM information_schema.columns WHERE table_name = bar1 OR table_name = bar2
into new_table