我有2张桌子。假设a
& b
a
有id
,name
,roll
。 b
有id
,group
,name
此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
请不要问为什么这些列名相同。我承认这是一个错误。但它已经实施并且使用频繁。所以寻找另一种方式。有没有简单的方法在合并它们时排除列?
答案 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