使用连接忽略选择中的表列值

Posted

技术标签:

【中文标题】使用连接忽略选择中的表列值【英文标题】:Ignore table column value in select with joins 【发布时间】:2019-02-07 16:28:57 【问题描述】:

我有 2 个 mysql

table1 字段 - id、field1、field2、field3、field4、field5 table2 字段 - id, field3

我需要的是这个查询的结果

SELECT 
    t1.id, 
    t1.field1,
    t1.field2,
    t2.field3,
    t1.field4,
    t1.field5
FROM table1 as t1
INNER JOIN table2 as t2 ON t1.id = t2.id
WHERE 1

我遇到的问题是我有更多相似的表,在某些情况下 table1 字段可能不是 6 个字段,而是 50 个字段。

这就是为什么我需要让查询看起来像

SELECT t1.*, t2.field3 as field3
FROM table1 as t1
INNER JOIN table2 as t2 ON t1.id = t2.id
WHERE 1

但在此查询中 t1.field3 正在选择并显示在查询结果中。

谁能告诉我如何使我的第一个查询看起来像第二个查询并返回第一个查询的结果。

【问题讨论】:

t1.* 将检索表的所有字段,然后您不能排除这些列之一。将另一个表中的 field3 重命名为独特的名称,以便您可以在任何进一步的处理中忽略 t1.field3。 编写一个快速程序来生成查询文本。 (为什么相似的表会在 6 到 50 个字段之间变化?这在数据库结构方面似乎是一个危险信号。) #Andy G - 对于您的第一条评论,可以这样做,但是我在 php 中进行了额外的处理,这是我想避免的。对于您的第二条评论,我的意思是我还有其他类似情况,第一个表中有更多字段,基本上我想避免在查询中写入所有这些字段。 【参考方案1】:

使用普通 SQL 是不可能的,您可以通过一些使用存储过程的编程来实现,通过首先从表中读取列名然后生成查询来生成动态查询

【讨论】:

以上是关于使用连接忽略选择中的表列值的主要内容,如果未能解决你的问题,请参考以下文章

oracle中如何取消列值中的空格

oracle中如何取消列值中的空格

使用 Azure SQL 将不同的表列合并为一个

对列值进行排序以匹配另一个表列中值的顺序

使用正则表达式删除Mysql中列值中的括号()

dplyr 滞后与列值中的 n