调试一个查询SQL Server 05的应用程序,不能更改查询,但需要优化事情。
分别运行所有的select都快<1秒,例如: select * from acscard,select id from employee...当合并在一起时,需要50秒。
在使用EXISTS时,将不感兴趣的accesscardid字段设置为null还是设置为'‘更好?
SELECT * FROM ACSCard
WHERE NOT EXISTS
( SELECT Id FROM Employee
WHERE Employee.AccessCardI
我目前正在尝试编写一个SQL查询,该查询是前100行,其中两个值的增幅最大。我现在的解决方案是这样写我的查询:
//NULL is also not accepted in where clause, shortened version
SELECT TOP 100 id, name, currentValue, pastDayValue FROM comparables
WHERE NOT pastDayValue = currentValue AND NOT pastDayValue = 0 AND NOT currentValue = 0
ORDER BY (currentValue -
为什么这个查询会返回mysql表中的所有行?
- Schema SQL
CREATE TABLE test (
u char(100),
p char(100)
);
INSERT INTO test (u,p) VALUES ('admin', 'adminp');
INSERT INTO test (u,p) VALUES ('michelle', 'michellep');
-查询SQL
SELECT * FROM test where p=p=1
我有一个包含2列id和myvalue的表。id是主键,myvalue是unsigned smallint。id 1的当前myvalue为0。我有以下sql查询:
UPDATE tablename SET myvalue = IF(myvalue - 1 > 0, myvalue - 1, 0) WHERE id = 1;
我得到以下错误:
ERROR 1690 (22003): BIGINT UNSIGNED value is out of range in '(`dbname`.`tablename`.`myvalue` - 1)'
知道为什么会这样吗?我找不到任何关于
这是我感兴趣的查询,如果在指定的calldate之前没有结果,我希望得到0。
SELECT ifnull(count(*),0),
FROM `cdr2015`
WHERE dst in ('602','603','605')
AND ifnull(DATE_FORMAT(calldate, '%Y-%m-%d') = '2015-04-20' ,0)
AND disposition = 'NO ANSWER'
AND ((WEEKD
我有以下(私有) PL/SQL函数(内部包)返回前一个月的'YYYYMM‘格式:
FUNCTION GET_PREV_MONTH RETURN VARCHAR2 IS
BEGIN
RETURN TO_CHAR(ADD_MONTHS(SYSDATE,-1),'YYYYMM');
END GET_PREV_MONTH;
我需要在几个查询中比较一下上个月的记录,所以我想让上个月返回的私有函数返回。为什么不能在其他SQL查询的WHERE子句中使用来自GET_PREV_MONTH()函数的返回值,例如:
UPDATE mytable t SET t.col=1
WHERE T
我使用的是MySQL 5.6。我公司的内部应用程序使用SET SQL_SAFE_UPDATES = 0;(我知道)。我以前也提过这个问题,但有人告诉我不要管它了。 今天,我意外地编写并运行了这个DELETE FROM table WHERE id - 11235,使用的是-而不是=和lo,结果发现所有的行都被删除了。我知道在安全更新关闭的情况下删除所有行是允许的,但是为什么不抛出一些语法错误呢?在SQL中id - 11235到底是什么意思?
我不明白为什么会发生这种事。有人能解释一下吗?
SELECT * FROM users WHERE name = ''
按应有的方式返回记录
SELECT * FROM users WHERE name = 'janet'
按应有的方式返回1记录
SELECT * FROM users WHERE name = ''-SLEEP(3)
返回表中的每个记录,为什么?
SLEEP(3) returns 0
使用name = ''-0会产生相同的结果(返回每条记录)
这不适合实际使用,因为我正在测试基于时间的SQL注入
这是对这个问题的回答:我们需要一个客户ID列表,列出他们订购的总金额。编写一个SQL语句以返回customer ( Orders表中的cust_id)和使用子查询返回每个客户的订单总数的total_ordered。根据花费的金额从最大到最少对结果进行排序。提示:您以前已经使用SUM()来计算订单总计。
SELECT prod_name,
(SELECT Sum(quantity)
FROM OrderItems
WHERE Products.prod_id=OrderItems.prod_id) AS quant_sold
FROM Product
假设您有一个包含50000行的表,并且希望根据pk值删除5个条目。预期的查询可能如下所示:
DELETE FROM table_name WHERE id = 5 OR id = 10 OR id = 15 OR id = 20 OR id = 25
这与预期的一样。但是,如果您很着急,并且意外地将其格式化为:
DELETE FROM table_name WHERE id = 5 OR 10 OR 15 OR 20 OR 25
它将删除所有50000行。有没有人知道这是不是bug?如果不是,我不明白为什么它把它当作一个delete all,而不是返回一个语法错误。
我不太明白这一点:
我有两个表;第一个表名为EthnicGroup;这个表存储了国家代码、种族名称和该民族的百分比。
在名为Country的第二个表中,我存储了以下内容: Name (国家的名称)、Code (该国家的代码)以及其他一些内容,但这与这个问题无关
通过以下查询,我从EthnicGroup表中选择了国家代码,这些国家代码在各自的国家中具有超过7个不同的种族。
SELECT
country
FROM
EthnicGroup
GROUP BY country
HAVING (COUNT(*) > 7)
ORDER BY country
使用下面的代码,我得到了下
我试图跳过我的SQL查询中的第一行和最后一行(即跳过sequence=0和sequence=4在本例中的位置),但我的SQL查询似乎无法工作。知道为什么吗?逻辑似乎是正确的:
SELECT * FROM waypoint
WHERE id NOT IN(
(SELECT MIN(ID) FROM waypoint),
(SELECT MAX(ID) FROM waypoint)
)
AND booking_id="1";
我在Server 2012中有一个表,其中包含这些值(它们都是整数)。
a b
1 1
1 0
-1 1
2 1
此查询工作正常。
select * from T1
where
b <> 0 and a / b > 0
此查询失败。
select * from T1
where
b * b * b <> 0 and a / b > 0
我想我知道为什么但还是..。为什么?你能清楚地解释(或者指给我一些官方文档)什么是Server短路,什么不是?
我发现声明说
我为我的安全课做了一些功课,包括SQL注入。我发现,与典型的' OR '1'=1示例相比,我可以执行更短的SQL注入。相反,我可以做'='。在典型登录框的密码字段中键入--这将提供如下SQL查询:
SELECT * FROM Users WHERE username='user' AND password=''='';
结果是,password=''=''的计算结果为1,从而允许SQL工作。
在进行了更多的测试之后,我发现如果测试一个字符串是否等于0,它将返回1:
SELEC
我有一个应该可以工作的update查询,但是由于某些原因,它不能工作
String sql="UPDATE TB_EARTHORIENTATIONPARAMETER_UI SET YEAR='year1', MONTH='month1', DAY='day1', MJD='mjd1', WHERE (EOPID=1)";
它给出了以下错误
Incorrect integer value 'year1' for column YEAR at row1
我的表由以下列及其类型组成
| EOPI
我是SQL新手,对"WHERE 1IN“子句感到困惑,我的问题是:
让我们以中的数据库为例。
如果我按如下方式查询:
SELECT C1.CustomerID From Customers C1
WHERE 1 IN
(SELECT COUNT(O1.CustomerID) FROM Orders O1
WHERE C1.CustomerID = O1.CustomerID);
这个查询的意思是什么?任何帮助都将不胜感激,谢谢!
我有一个关于SQL的问题。 我最近正在编写一个应用程序,其中sql查询是根据用户从UI输入动态生成的。有趣的是,从UI传来的值列表都是字符串。我被告知要添加对数值的支持。但我注意到,将numeric string value传递给数值字段也是有效的。 例如: Select * from employee where id = 36815 和 Select * from employee where id = "36815" 我的问题是为什么第二个查询会起作用。即使我将=操作符更改为<或>,它仍然可以工作。我想知道它为什么有效,我们应该按原样支持它。对数字数据库列使
知道吗,为什么下面的第一个查询返回一个带有-1,NULL的行,尽管它有一个WHERE 1=2?
只有当我将查询放在另一个子查询中时,它才正确工作(并返回一个空的结果集)。
在Microsoft SQL Server 2014和2016上进行测试
DECLARE @i INT = 1
SELECT @i i, MAX(sub.id) mid
FROM (SELECT TOP(@i) x.id
FROM (VALUES(1), (2), (3), (4)) x(id)
WHERE x.id > 2 + @i
ORDER BY x.
我是个初学者,自己学习.请帮我澄清一个问题:我正在使用一个足球数据库,并试图回答这个问题:在没有平局结束的Match中,列出每个赛季的平均进球数超过1;
对它的正确查询是:
select season,round((sum(home_team_goal+away_team_goal) *1.0) /count(id),3) as ratio
from match
where home_team_goal != away_team_goal
group by season
having ratio > 1
我不明白关于这个查询的两件事:
为什么我要*1.0?为什么有这个必要
我查询按页码提取记录,如下所示
SELECT
FirstName = R.FirstName,
LastName = R.LastName,
CountryId = R.CountryID,
......
FROM Resource AS R
WHERE ...
ORDER BY LastName, FirstName
OFFSET 10 * (@PageNumber - 1) ROWS
FETCH NEXT 10 ROWS ONLY
记录总数超过30 000份。
当@PageNumber = 1运行时,运行时间小于1s,几乎是即时的。
当@PageNumber
我的Server中有两个表,我试图加入这些表,并且只有使用where子句中的一些条件进行过滤才能获得结果。首先,我在这里创建了一个示例小提琴,以查看两个表的示例数据。
因此,这里我的目标是使用order列组合两个表,并且只获取customer_comment表中的customer_comment列(不包括lin_cmt_no = 3的OELINCMT_SQL表记录)。因此,举个例子,假设小提琴的order number : 186349表中的customer_comment表有3条记录在各自的连接OELINCMT_SQL表中。具体来说,这些是ID =1,2 and 3,它有cmt_sql_n
我在SQL Server2008 R2上对下表运行简单查询:
Id (int,非null)
已启用(位,非空)
这两列都有单独的索引。
因此,当我运行以下查询时:
SELECT Id FROM Entities WHERE Enabled = 1
执行计划显示INDEX_SCAN已完成(这是由CONVERT_IMPLICIT on Enabled列引起的)
当我运行另一个查询时:
SELECT Id FROM Entities WHERE Enabled = '1'
或
SELECT Id FROM Entities WHERE Enabled = 'true'
Typo3 DB LIB有一个名为exec_SELECTcountRows的方法。其实现如下所示:
/**
* Counts the number of rows in a table.
*
* @param string $field: Name of the field to use in the
COUNT() expression (e.g. '*')
* @param string $table: Name of the table to count rows for
* @par
我是HQL的新手,我正在处理子查询。
我有以下SQL子查询:
select * from (
select * from table order by columnname
) as subquery
where columnvalue = 'somevalue';
我想在HQL中启动查询。我编写了以下代码:
Result = session.createQuery("from (from table order by columnname) as subquery where columnvalue = :somevalue")
.setPa
我一直在寻找一种执行SQL查询的好方法,其中我可以使用where语句,如果将其留空,将表现为根本不存在。我找到了这个,看起来效果很好:
WHERE (Column = @value OR @value is null)
如果我为@value指定了一个值,搜索就会按照我想要的方式进行过滤。但是如果我传入null,就像是说@value可以是任何东西。我喜欢这个。这很好。但我不明白的是,为什么会这样呢?
SELECT NAME,SALARY
FROM STAFF
WHERE SALARY>(SELECT AVG(SALARY) FROM SFAFF)
AND YEARS < (SELECT AVG(YEARS) FROM STAFF)
为什么在这个sql中,函数AVG必须在子查询中?
为什么下面的sql是错误的?
SELECT NAME,SALARY
FROM STAFF
WHERE SALARY>AVG(SALARY)
AND YEARS < AVG(YEARS)
我有以下sql查询无法执行,错误为“查询处理器耗尽了内部资源,无法生成查询计划。这是一种罕见的事件,仅适用于极其复杂的查询或引用了大量表或分区的查询。请简化查询。”
SELECT merchant.id,merchant.name,order.id,order.name,order.shipaddress
FROM orders AS order
LEFT JOIN
merchants AS merchant
ON
order.merchantid = merchant.id
WHERE
order.id IN (12 , 50 , 60 , 48,.. ...(upto 380
我有MySQL服务器5.1.53版本。我在找一个小时自己回答这个问题。包括在上阅读文档本身
目前,我运行这个查询。
SELECT dv2.timestamp
FROM data_val AS dv2
WHERE dv2.timestamp > '2011-06-10 22:26:25' ORDER BY dv3.timestamp DESC
LIMIT 1
然后我试图通过确定ORDER BY减去1的计算来消除MAX_QUERIES语法。
SELECT (COUNT(*)-1) total
FROM data_val AS dv2a
WHERE dv2a.times
我使用的是MS SQL2008,我有一个状态表(id,name)和一个项目表(id,name,statusid,deleted)。
我想要计算每种状态下的项目数,并有以下查询:
SELECT status.id,
ISNULL(COUNT (items.name), 0) AS 'count'
FROM status
LEFT OUTER JOIN items
ON items.statusid = status.id
GROUP BY status.id
复杂之处在于,我希望获得所有状态,如果没有状态项,则返回0。
上面的代码可以很好地解决这个问题,但是当我添加WHERE i
当我查询视图时,请使用此sql
SELECT PRODID ,PRODNAME,PRICE ,storenum FROM V_CHAN_PROD WHERE (SIMPLECODE='6954767410623' OR OUTERCODE = '6954767410623') AND CHANID='10000177'
结果是0
但是,当我将sql改为
SELECT PRODID ,PRODNAME,PRICE ,storenum FROM V_CHAN_PROD WHERE (SIMPLECODE='6954767410623'
我需要实现一种在不同条件下进行查询的方法。我不想每次都做一个新的准备语句,因为这就是为什么我首先使用准备好的语句。基本上,我有三个条件。
String sql = "select * from t where attr1 = ? and attr2 = ? and attr3 = ?;";
但是,根据我得到的参数,我可能只需要conditions.Say的一个子集,就像这样的void (SomeWrapper filter){..},其中在条件中使用filter的任何非空字段。
所以我可能最终需要像下面这样的查询
String sql1 = "select * from
我试图理解为什么MySQL中的这个查询根本不返回任何结果,而我认为它应该返回一个列值为0的行
select count(ps.id) as totalcount
from tblpresi ps
inner join users_staging.tbluser u on u.id = ps.userid
where ps.id = 3678
group by ps.id
没有"Group By“的相同查询可以正常工作。
有什么想法吗?