我有以下疑问
第一个使用内连接
SELECT item_ID,item_Code,item_Name
FROM [Pharmacy].[tblitemHdr] I
INNER JOIN EMR.tblFavourites F ON I.item_ID=F.itemID
WHERE F.doctorID = @doctorId AND F.favType = 'I'
Run Code Online (Sandbox Code Playgroud)
第二个使用子查询
SELECT item_ID,item_Code,item_Name from [Pharmacy].[tblitemHdr]
WHERE item_ID IN
(SELECT itemID FROM EMR.tblFavourites
WHERE doctorID = @doctorId AND favType = 'I'
)
Run Code Online (Sandbox Code Playgroud)
在此项目表中[Pharmacy].[tblitemHdr]包含15列和2000条记录.并[Pharmacy].[tblitemHdr]包含5列和大约100条记录.在这种情况下which query gives me better performance?
select `personal`.`id` AS `id`,
`personal`.`name` AS `name`,
(select count(visit.id)
from visit,personal
where visit.user_id=personal.id) as count
from personal;
Run Code Online (Sandbox Code Playgroud)
我试图让所有用户和他们所做的访问次数.
我得到的结果是所有用户,但count列包含相同的值(不是特定于该行id).
我在这做错了什么?如何告诉mysql用户这个行id?
是复合选择最佳方式还是有更好的方法?
我有两个如下表(日期格式:yyyy-MM-dd):
1)Table1 - EMPLOYEE_OVERTIMES(别名:EO)
EMPLOYEE_ID | OVERTIME_DATE
------------------------------------------------
1 | 2012-04-01
2 | 2012-08-14
3 | 2012-07-22
4 | 2012-10-30
5 | 2012-06-07
Run Code Online (Sandbox Code Playgroud)
2)表2 - EMPLOYEE_HOLIDAYS(别名:EH)
EMPLOYEE_ID | START_DATE | END_DATE |
-----------------------------------------
1 | 2012-03-28 | 2012-04-10
2 | 2012-01-14 | 2012-01-30
3 | 2012-07-15 | 2012-07-25
4 | 2012-10-10 | 2012-10-13
5 | 2012-06-01 | 2012-06-07
Run Code Online (Sandbox Code Playgroud)
表 EMPLOYEE_OVERTIMES 和 EMPLOYEE_HOLIDAYS 是从其他表联接的。我想查找满足以下条件的所有记录:EH.START_DATE <= EO.OVERTIME_DATE <= EH.END_DATE
3)结果表
EMPLOYEE_ID | START_DATE | END_DATE | OVERTIME_DATE
-------------------------------------------------------
1 | 2012-03-28 | …Run Code Online (Sandbox Code Playgroud) 我有一个简单的表 - >
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY
by_id INT UNSIGNED NOT NULL
posted_on INT UNSIGNED NOT NULL
Run Code Online (Sandbox Code Playgroud)
我的桌面引擎是MyISAM.
我呼吁多列索引combo1上by_id,posted_on,id
我运行这个查询 - >
EXPLAIN SELECT * FROM books
WHERE by_id = '1' AND posted_on = '0'
ORDER BY id DESC LIMIT 7;
Run Code Online (Sandbox Code Playgroud)
该Extra柱说,Using where和键列说combo1
但是,当我运行此查询 - >
EXPLAIN SELECT * FROM books
WHERE by_id IN(1,7,10) AND posted_on = '0'
ORDER BY id DESC LIMIT 7;
Run Code Online (Sandbox Code Playgroud)
该Extra …
我正在制作一个电话报告但是我遇到了麻烦.我需要计算一个代理人在电话上花了多长时间,源数据是HH:MM:SS的呼叫持续时间.如同在1小时12分10秒内一样几秒钟.因此,如果2个代理人接听了2个电话,那么花费的时间就会计算在那一天.
是否可以将其更改为秒?或者任何人都可以提出更好的建议?
我的表格显示了各个国家/地区的搜索量以及拍摄日期,我想要一个查询,向我展示2012年和2013年每个月的搜索量,我需要在月份中添加单独的列,年份和搜索次数.我以前使用下面的查询返回每周搜索量,但我想将其更改为2012年和2013年每个月的搜索量.
SELECT COUNT(*) as `count`,
`region`,
DATE(NOW()) as `week_ending`
FROM my_stores.stats
WHERE `date` > DATE_ADD(DATE(NOW()), INTERVAL -1 WEEK)
AND
`date` < DATE(NOW())
GROUP BY `region`, DATE(NOW());
Run Code Online (Sandbox Code Playgroud) 我创建了一个查询,当从子查询返回 null 时,我想返回 0,我使用了 IFNULL 函数,但最后我仍然得到 null。下面是一个类似的查询,请帮忙,不知道该怎么办。(PS:我是用手机写的所以mu格式可能不好看,抱歉)
SELECT t1.id, t1.Amount, t1.parent,
( SELECT @Total := IFNULL(SUM(t2.amount), 0) AS amount FROM transactions t2 WHERE t1.`id` = t2.parent GROUP BY t2.parent ) AS AmountRepaid,
( SELECT CASE WHEN CAST(SUM(t3.amount) AS DECIMAL) > CAST(t1.amount AS DECIMAL) THEN "Over" WHEN CAST(SUM(t3.amount) AS DECIMAL) = CAST(t1.amount AS DECIMAL) THEN "Complete" ELSE "Incomplete" END FROM transactions t3 WHERE t1.`id` = t3.Parent GROUP BY t3.Parent ) AS PaymentStatus
FROM transactions t1 WHERE t1.`Parent` IS NULL;
Run Code Online (Sandbox Code Playgroud) 我需要针对以下场景的解决方案:
TABLE A:
col1
1
-1
6
-5
2
4
-2
5
Run Code Online (Sandbox Code Playgroud)
我希望OUTPUT为:
POSITIVE NEGATIVE
1 -1
2 -2
4 NULL
5 -5
6 NULL
Run Code Online (Sandbox Code Playgroud) 我需要帮助编写一个SQL查询,它可以让我得到我想要的结果.
我有一个文档上传功能,可以在多个位置为客户端上传文档.表结构简单,只有5列; FileID,FileName,Title,Description和LocationID.如果用户上传3个位置的文档,则会在此表中输入3个条目.让我们说
FileID FileName Title Description LocationID 1 File1 File1 Description 1 100 2 File1 File1 Description 1 21 4 File1 File1 Description 1 181
用户上传4个位置的另一个文件,输入数据,表格现在如下所示
FileID FileName Title Description LocationID 1 File1.doc File1 Description 1 100 2 File1.doc File1 Description 1 21 4 File1.doc File1 Description 1 181 5 File2.pdf File2 Description 2 123 6 File2.pdf File2 Description 2 12 7 File2.pdf File2 Description 2 126 8 File2.pdf File2 Description 2 100
现在我想要的结果是
FileName Title Description LocationCSV File1.doc …
我有一张像这样的桌子:
friend : (userid , friendid)
Run Code Online (Sandbox Code Playgroud)
因此,如果user_a与成为朋友user_b,我会将下面的行加载到表中
user_a , user_b
Run Code Online (Sandbox Code Playgroud)
而且我不插入usar_b , user_a表。
那么我如何通过mysql查询获得user_b的朋友列表呢?
假设我们有3个表格:
table1:名字,id
table2:编号,姓氏
table3:姓氏,身高
我们要显示:名字,身高
我可能会使用完全连接:
select firstname, height from
(select firstname, lastname ln from table1
full join table2 on table1.id=table2.id)
full join table3 on ln=table3.lastname
Run Code Online (Sandbox Code Playgroud)
但是在sqlite中,不存在完全联接和正确联接,因此我需要一些如何使用联合来获得联接的方法。有什么想法,怎么做?
DELIMITER $
DROP PROCEDURE IF EXISTS discount$
CREATE PROCEDURE discount(IN price INT, OUT price_after_discount INT)
BEGIN
IF (price<100) THEN
SET price_after_discount=price;
ELSEIF(price>100 AND price<200) THEN
SET price_after_discount=(price*0.10)+price;
ELSE
SET price_after_discount=(price*0.20)+price;
END IF;
END$
DELIMITER;
Run Code Online (Sandbox Code Playgroud)
Mysql告诉我第9行有错误:
1064 - 您的SQL语法出错; 检查与MySQL服务器版本对应的手册,以便在第1行的"DELIMITER"附近使用正确的语法
为什么我有错误?我做错了什么?