如果不在where子句中编写许多由和连接的条件,您是否可以在sql中使用相同的模式内部连接两个表,以便where子句检查两个表之间除一个字段外的所有字段的相等性?如果有很多字段(比如200个字段),sql语句就会变得太长。我在用mariadb。
例如,假设我有以下内容,其中“id”是主键:
表a(身份证、姓名、日期、出生地、住所、性别、年龄、身高、体重)
表b(身份证、姓名、日期、出生地、住所、性别、年龄、身高、体重)
当我内部联接表\u a和表\u b时,为了得到表\u a中的值和表\u b中的对应值对于除id以外的所有字段都相同的所有行,我只能考虑执行以下操作:
SELECT * FROM TABLE_A INNER JOIN TABLE_B WHERE
TABLE_A.name = TABLE_B.name AND
TABLE_A.date = TABLE_B.date AND
TABLE_A.origin = TABLE_B.origin AND
TABLE_A.residence = TABLE_B.residence AND
TABLE_A.gender = TABLE_B.gender AND
TABLE_A.age = TABLE_B.age AND
TABLE_A.height = TABLE_B.height AND
TABLE_A.weight = TABLE_B.weight;
有没有更好的方法不需要写超长where子句?
2条答案
按热度按时间d7v8vwbk1#
如果你告诉我们真正的目标是什么,我们也许能想出一个解决方案,避免这种混乱
WHERE
. 同时,以下是一些相关查询:这将对行集进行重复数据消除:
这也将:
这里有另一种方法可以考虑。它仍然需要大量的输入,但您可以复制和粘贴来完成一些工作:
如何在不键入列的情况下获取列列表:
qpgpyjmq2#
通过将一列重命名为不同的名称,对每个表进行子查询
select
as
. 那么natural join
子查询。这是一个inner join
using
所有公共/剩余列(或者只使用一个子查询&另一个原始表。)(请注意,如果您的规范将来要完全连接到您现在正在连接的列上&可能会有更多的列被添加到一个或两个表中,那么您需要列出当前的列—例如,在
using
. 这与select *
与select
特定列的名称。我想,在加入后,您希望如何获得所有当前列或当前联接列?如果您使用构建过程来减少select
那你就可以用在inner join
.)