我有以下CTE将给我整个发票的DocTotal。 ;WITH CTE_DocTotal AS ( SELECT SUM(Sale + VAT) AS DocTotal FROM PEDI_InvoiceDetail GROUP BY InvoiceNumber ) UPDATE PEDI_InvoiceDetail SET DocTotal = CTE_DocTotal.DocTotal 现在有了这个结果,我想进入PEDI_InvoiceDetail里的DocTotal值列。 我知道不会工作,我知道我错过了什么,是什么?
我有以下的MySQL查询: SELECT p.*, IF(COUNT(ms.PropertyID) > 0,1,0) AS Contacted, pm.MediaID, date_format(p.AvailableFrom, '%d %b %Y') AS 'AvailableFrom', astext(pg.Geometry) AS Geometry FROM property p, propertygeometry pg JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216 LEFT JOIN message ms ON ms.PropertyID = p.id AND ms.SenderID = 384216 LEFT JOIN property_media pm ON pm.PropertyID = p.id AND […]
比较这两个查询。 将filter放在连接条件或在子句中更快吗? 我一直觉得join标准的速度会更快,因为它会尽可能减less结果集,但是我不确定。 我将要build立一些testing来看,但我也想得到更清晰的阅读意见。 查询1 SELECT * FROM TableA a INNER JOIN TableXRef x ON a.ID = x.TableAID INNER JOIN TableB b ON x.TableBID = b.ID WHERE a.ID = 1 /* <– Filter here? */ 查询2 SELECT * FROM TableA a INNER JOIN TableXRef x ON a.ID = x.TableAID AND a.ID = 1 /* <– […]
任何人都可以给我一个想法或提示如何检查数据库表(MySQL)连续X天login(用户名,时间戳)存储? Stackoverflow做到了这一点(例如徽章像发烧友 – 如果你连续30天左右login…)。 你需要使用什么function?怎么做? 类似于SELECT 1 FROM login_dates WHERE … ?
我有两个表格(即,每一个foo链接到一个吧)。 CREATE TABLE foo ( id INTEGER PRIMARY KEY, x INTEGER NOT NULL, y INTEGER NOT NULL, …, bar_id INTEGER UNIQUE NOT NULL, FOREIGN key (bar_id) REFERENCES bar(id) ); CREATE TABLE bar ( id INTEGER PRIMARY KEY, z INTEGER NOT NULL, … ); 在foo中使用嵌套查询来满足特定条件很容易: INSERT INTO foo (…) (SELECT … FROM foo WHERE …) 但我无法弄清楚如何在foo为每行创build一个关联的行的副本,并将bar的id插入到新的foo行中。 […]
我有2个表(srcTable1&destTable)具有相同的模式。 我想从srcTable到destTable复制所有行,并忽略重复。 我以为我可以只添加一个子查询的WHERE子句,只会给我不重复的行。 但是,它似乎并没有工作。 我没有插入或select任何行。 INSERT INTO destTable SELECT * FROM srcTable WHERE NOT EXISTS(SELECT * FROM destTable) 我意识到我可以做这样的事情: INSERT INTO destTable SELECT * FROM srcTable WHERE MyKey IN (SELECT MyKey FROM destTable) 但是,我的表有多个键,我想不出如何用多个键来做到这一点。 任何想法我做错了什么,或者你有什么更好的想法?
我想创build一个GUID并将其存储在数据库中。 在C#中,guid可以使用Guid.NewGuid()创build。 这会创build一个128位的整数。 SQL Server有一个uniqueidentifier列,它包含一个巨大的hex数字。 有没有一个好的/首选的方式,使C#和SQL Server GUID一起玩好? (即使用Guid.New()创build一个GUID,然后使用nvarchar或其他字段将其存储在数据库中…或者通过其他方式创buildSQL Server预期的hex数字)
我想比较两个给定date之间的数据库中的date。 数据库中的列是DATETIME,我只想将它与date格式进行比较,而不是date时间格式。 SELECT * FROM `players` WHERE CONVERT(CHAR(10),us_reg_date,120) >= '2000-07-05' AND CONVERT(CHAR(10),us_reg_date,120) <= '2011-11-10' 我在执行上面的SQL时遇到这个错误: 你的SQL语法有错误; 检查与您的MySQL服务器版本相对应的手册,以在'us_reg_date,120'附近使用正确的语法)> ='2000-07-05'AND CONVERT(CHAR(10),us_reg_date,120)<='2011-'at第1行 这个问题怎么解决?
我知道这是主观的,但我想知道人们的意见,并希望在deviseSQL Server表结构时可以应用一些最佳实践。 我个人觉得,在一个固定的(最大)长度的varchar上键入一个表是一个禁止的,因为这意味着必须在任何其他使用这个作为外键的表上传播相同的固定长度。 使用一个int ,将避免必须在板上应用相同的长度,这将导致人为错误,即1个表具有varchar (10) ,另一个varchar (20) 。 这听起来像是一个噩梦初步设置,再加上意味着未来维护表是繁琐的。 例如,键入的varchar列突然变成了12个字符而不是10个。现在必须去更新所有其他表,这可能是一个非常艰巨的任务。 我错了吗? 我在这里错过了什么吗? 我想知道别人怎么看这个,如果用主键坚持int是避免维护噩梦的最好方法。
我遇到一个非常混乱的情况,这让我质疑我对SQL Server连接的理解。 SELECT t1.f2 FROM t1 LEFT JOIN t2 ON t1.f1 = t2.f1 AND cond2 AND t2.f3 > something 不会给出与以下相同的结果: SELECT t1.f2 FROM t1 LEFT JOIN t2 ON t1.f1 = t2.f1 AND cond2 WHERE t2.f3 > something 可以请人帮忙告诉这两个查询是否应该是相当的? 谢谢