在join-mysql之后唯一地标识两个不同表的相同列名

时间:2014-04-02 06:32:25

标签: php mysql sql database

我有2张桌子。假设a& b

aidnamerollbidgroupname

name列数据不相同。如何选择并唯一标识它们?

我知道

SELECT a.id,a.name,a.group FROM a,b ............

我知道这一点。但这是一个例子。我正在处理大量数据,每个表中有20-30列。所以我不想写我需要选择的列名,而是想写出我要排除的名称。

SELECT * Except b.name............

OR是否有任何方法可以在加入后进行唯一标识。像

.......... a,b WHERE a.name as name1

请不要问为什么这些列名相同。我承认这是一个错误。但它已经实施并且使用频繁。所以寻找另一种方式。有没有简单的方法在合并它们时排除列?

5 个答案:

答案 0 :(得分:1)

好吧,你不能写出你想要排除的名字。这不是SQL的工作方式。

但是,如果写出20-30个列名称是一个很大的负担,那么可以使用information_schema.columns。我是这样写的,因为20-30个列的名称并不是特别大,写出来可能比编写问题要少。

但是,回到解决方案。它看起来像这样:

select concat(c.column_name, ' as ', 'a_', column_name, ', ')
from information_schema.columns c
where table_name = 'a' ;

您可能也想要包含表架构。

答案 1 :(得分:0)

无法在SQL SELECT语句中排除列,只能选择一列。您可以在选择列的同时为列提供别名,以便您可以使用这些别名来标识列。

SELECT a.id as [column1],a.name as [column2],a.group as [column3] FROM a,b ............

答案 2 :(得分:0)

作为IDEA,您可以做的是,如果您想避免特定表格和列表的列。你的陈述有多个表,你可以尝试下面的,

假设表a和表中有20列。表b中的5列,您要避免col2,col3&表b的第4栏。标准方法是你应该写表a&的所有列的名称。表b的必填列。但你可以通过编写。*&来避免写出20列表的长列表。然后键入表b的必填列。请参阅以下声明。

Select a.*,b.col1,b.col4,b.col5 from a,b

但是如果你需要从两个表中排除一些列,那么我认为除了从两个表中编写所有必需的列名之外别无他法。

答案 3 :(得分:0)

无法排除特定列,但您可以通过以下步骤避免编写所有列名称并轻松完成工作 -

Step1:执行以下查询 -

SELECT a.*,b.* FROM a,b ............limit 1;

步骤2:将其导出为带有标题的csv格式。

步骤3:从csv。

进行Copyp第一行(标题)

步骤4:删除列,这些不是必需的,并在查询中使用其他列。

答案 4 :(得分:0)

我只能看到一个人 -

首先创建一个temorary表

CREATE TEMPORARY TABLE IF NOT EXISTS mytable
(id int(11) NOT NULL, PRIMARY KEY (id)) ENGINE=MyISAM;

然后将您的列放在临时表中 -

SELECT * INTO mytable
FROM YourTable
/* Drop the cloumns that are not needed */
ALTER TABLE mytable
DROP COLUMN ColumnToDrop
/* Get results and drop temp table */
SELECT * FROM #TempTable
DROP TABLE #TempTable