我们都知道要从表中select所有的列,我们可以使用 SELECT * FROM tableA 有没有一种方法来从表中排除列(s)而不指定所有的列? SELECT * [except columnA] FROM tableA 我知道的唯一方法是手动指定所有列并排除不需要的列。 这是非常耗时的,所以我正在寻找节省时间和精力的方法,以及如果表格有更多/更less的列,将来的维护。 谢谢!
读完之后,这不是 显式与隐式SQL联接的重复。 答案可能相关(甚至相同),但问题是不同的。 它们之间有什么区别,应该怎么办? 如果我理解正确,查询优化器应该能够交替使用。
为了说明,假设我有两个表格如下: VehicleID Name 1 Chuck 2 Larry LocationID VehicleID City 1 1 New York 2 1 Seattle 3 1 Vancouver 4 2 Los Angeles 5 2 Houston 我想写一个查询来返回以下结果: VehicleID Name Locations 1 Chuck New York, Seattle, Vancouver 2 Larry Los Angeles, Houston 我知道这可以使用服务器端游标,即: DECLARE @VehicleID int DECLARE @VehicleName varchar(100) DECLARE @LocationCity varchar(100) DECLARE @Locations varchar(4000) […]
http://en.wikipedia.org/wiki/Upsert 在SQL Server中插入更新存储过程 有没有一些聪明的方式来做到这一点,我没有想到的SQLite? 基本上我想更新四列中的三个,如果logging存在,如果它不存在,我想插入logging与第四列的默认(NUL)值。 ID是一个主键,所以只有一个logging到UPSERT。 (我试图避免SELECT的开销,以确定如果我需要更新或INSERT显然) build议?
我在Postgres 9.2中有下面的表格(简化forms) CREATE TABLE user_msg_log ( aggr_date DATE, user_id INTEGER, running_total INTEGER ); 它每个用户和每天最多包含一条logging。 300天内每天将会有大约50万条logging。 每个用户的running_total总是在增加。 我想在特定date之前有效地检索每个用户的最新logging。 我的查询是: SELECT user_id, max(aggr_date), max(running_total) FROM user_msg_log WHERE aggr_date <= :mydate GROUP BY user_id 这是非常缓慢的。 我也试过了: SELECT DISTINCT ON(user_id), aggr_date, running_total FROM user_msg_log WHERE aggr_date <= :mydate ORDER BY user_id, aggr_date DESC; 它有相同的计划,同样缓慢。 到目前为止,我在user_msg_log(aggr_date)上有一个索引,但没有多大帮助。 有没有其他的指标,我应该用来加快这一点,或者任何其他方式来实现我想要的?
假设MyTable(KEY, datafield1, datafield2…)的表结构MyTable(KEY, datafield1, datafield2…) 。 通常我想要更新现有logging,或者如果不存在,则插入新logging。 主要有: IF (key exists) run update command ELSE run insert command 什么是最好的performance方式来写这个?
我写了一个函数,输出一个PostgreSQL SELECT查询很好地形成了文本forms。 现在我不想输出一个文本了,但实际上运行生成的SELECT语句对数据库并返回结果 – 就像查询本身一样。 我到目前为止: CREATE OR REPLACE FUNCTION data_of(integer) RETURNS text AS $BODY$ DECLARE sensors varchar(100); — holds list of column names type varchar(100); — holds name of table result text; — holds SQL query — declare more variables BEGIN — do some crazy stuff result := 'SELECT\r\nDatahora,' || sensors || '\r\n\r\nFROM\r\n' || […]
我有一个数据库帐号和卡号。 我将这些匹配到一个文件来更新任何卡号到帐号,所以我只使用帐号。 我创build了一个链接表和账户/卡数据库的视图来返回表ID和相关的账号,现在我需要更新那些账号与账号相匹配的logging。 这是Sales_Import表,需要更新帐号字段: LeadID AccountNumber 147 5807811235 150 5807811326 185 7006100100007267039 这是RetrieveAccountNumber表,我需要从哪里更新: LeadID AccountNumber 147 7006100100007266957 150 7006100100007267039 我尝试了下面,但到目前为止没有运气: UPDATE [Sales_Lead].[dbo].[Sales_Import] SET [AccountNumber] = (SELECT RetrieveAccountNumber.AccountNumber FROM RetrieveAccountNumber WHERE [Sales_Lead].[dbo].[Sales_Import]. LeadID = RetrieveAccountNumber.LeadID) 它将卡号更新为帐号,但帐号被NULLreplace
由于Postgres具有执行LATERAL连接的function,因此我一直在阅读,因为我目前正在为我的团队进行复杂的数据转储,导致大量低效的子查询,使整个查询花费四分钟或更长时间。 我明白, LATERALjoin可能会帮助我,但即使从Heap Analytics阅读这样的文章之后,我仍然不太理解。 什么是LATERAL连接的用例? LATERAL连接和子查询有什么区别?
我听说SELECT *在编写SQL命令时通常是不好的做法,因为SELECT专门需要的列效率更高。 如果我需要SELECT表中的每一列,我应该使用 SELECT * FROM TABLE 要么 SELECT column1, colum2, column3, etc. FROM TABLE 在这种情况下效率真的很重要吗? 如果你真的需要所有的数据,我会认为SELECT *会在内部更加优化,但是我没有真正理解数据库。 我很想知道这种情况下的最佳做法。 更新:我可能应该指定唯一的情况,我真的想做一个SELECT *是当我从一个表中select数据,我知道所有的列将永远需要检索,即使添加新的列。 鉴于我已经看到的反应,但这仍然是一个坏主意, SELECT *不应该用于更多的技术原因,我曾经经历过。