我有一个相对简单的查询连接两个表."Where"标准可以在连接标准中表示,也可以表示为where子句.我想知道哪个更有效率.
查询是从一开始就查找推销员的最大销售额.
情况1
select salesman.salesmanid, max(sales.quantity)
from salesman
inner join sales on salesman.salesmanid =sales.salesmanid
and sales.salesdate < salesman.promotiondate
group by salesman.salesmanid
Run Code Online (Sandbox Code Playgroud)
案例2
select salesman.salesmanid, max(sales.quantity)
from salesman
inner join sales on salesman.salesmanid =sales.salesmanid
where sales.salesdate < salesman.promotiondate
group by salesman.salesmanid
Run Code Online (Sandbox Code Playgroud)
注意案例1完全没有where子句
RDBMS是Sql Server 2005
编辑 如果第二部分连接条件或where子句是sales.salesdate <某个固定日期,那么它实际上没有任何加入这两个表的条件会改变答案.
鉴于:
两个需要过滤的查询:
select top 2 t1.ID, t1.ReceivedDate
from Table t1
where t1.Type = 'TYPE_1'
order by t1.ReceivedDate desc
Run Code Online (Sandbox Code Playgroud)
和:
select top 2 t2.ID
from Table t2
where t2.Type = 'TYPE_2'
order by t2.ReceivedDate desc
Run Code Online (Sandbox Code Playgroud)
另外,这些返回ID我正在寻找的:(13,11和12,6)
基本上,我想要两个特定类型数据的两个最新记录.
我想将这两个查询结合在一起,如下所示:
select top 2 t1.ID, t2.ReceivedDate
from Table t1
where t1.Type = 'TYPE_1'
order by ReceivedDate desc
union
select top 2 t2.ID
from Table t2
where t2.Type = 'TYPE_2'
order by ReceivedDate desc
Run Code Online (Sandbox Code Playgroud)
问题:
问题是这个查询是无效的,因为第一个查询select不能有一个order by子句unioned.它 …
从Swift 2.0开始,似乎我们可以更接近适用于谓词情境的泛型类型的扩展.
虽然我们仍然不能这样做:
protocol Idable {
var id : String { get }
}
extension Array where T : Idable {
...
}
Run Code Online (Sandbox Code Playgroud)
......我们现在可以这样做:
extension Array {
func filterWithId<T where T : Idable>(id : String) -> [T] {
...
}
}
Run Code Online (Sandbox Code Playgroud)
...和Swift语法接受它.但是,对于我的生活,当我填写示例函数的内容时,我无法弄清楚如何让编译器开心.假设我要尽可能明确:
extension Array {
func filterWithId<T where T : Idable>(id : String) -> [T] {
return self.filter { (item : T) -> Bool in
return item.id == id
}
}
}
Run Code Online (Sandbox Code Playgroud)
...编译器不会接受提供的过滤,过滤,抱怨
无法使用类型为'((T) - > Bool)'的参数列表调用'filter'
如果将item指定为Idable,则类似.这里有运气吗?
所以我设法让这个查询工作
List<string> listStatus = new List<string>() ;
listStatus.add("Text1");
List<string> listMerchants = new List<string>() ;
listMerchants.add("Text2");
from item in db.vw_Dropship_OrderItems
where listStatus.Contains(item.StatusCode)
&& listMerchants.Contains(item.MerchantId)
select item;
Run Code Online (Sandbox Code Playgroud)
在这里,我想检查listStatus和listMerchants是否仅为null,然后将它们放在WHERE子句中.
喜欢
如果listMerchants为null,则查询将是
where listStatus.Contains(item.StatusCode)
Run Code Online (Sandbox Code Playgroud)
我不想使用switch或If条件.
谢谢
我有这样一张桌子:
id image_id style_id style_value
-----------------------------------
1 45 24 red
1 45 25 big
1 47 26 small
1 45 27 round
1 49 28 rect
Run Code Online (Sandbox Code Playgroud)
我想在以下情况下使用image_id列:
style_id = 24 和 style_value = redstyle_id = 25 和 style_value = bigstyle_id = 26 和 style_value = round我有这样的查询:
$query = mysql_query("SELECT image_id FROM list WHERE (style_id = 24 AND style_value = 'red') AND (style_id = 25 AND style_value = 'big') AND (style_id = 27 AND style_value = 'round')
Run Code Online (Sandbox Code Playgroud)
但我无法得到任何结果.当我用OR制作这个样本时,效果很好.但我必须用AND做到这一点.因为我需要图像id,它们都是"红色,大而直". …
我使用以下代码从带有Code Igniter webapp的MySQL数据库中进行选择:
$query = $this->db->get_where('mytable',array('id'=>10));
Run Code Online (Sandbox Code Playgroud)
这很棒!但我想使用CI库编写以下MySQL语句?
SELECT * FROM `mytable` WHERE `id`='10' OR `field`='value'
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?谢谢!
我试图在Haskell中mapM_的do块内重构一个函数调用.我想将lambda提取到(本地)命名函数,以使代码更具可读性.
我的代码最初看起来像这样:
do
-- ...
mapM_ (\x -> x + 1) aList
return aValue
Run Code Online (Sandbox Code Playgroud)
我想改成它
do
-- ...
mapM_ func aList
where func x = x + 1
return aValue
Run Code Online (Sandbox Code Playgroud)
但我在线上遇到语法错误return aValue.我的实际lambda更复杂:-),但我确实用同样的lambda尝试它,以确保它不是lambda代码中的问题.
我该如何重写这段代码?我应该用let...... in代替吗?
我正在使用Laravel框架.
我有2个表(用户和成员).当我想登录时,我收到错误消息:
SQLSTATE [42S22]:未找到列:1054'where子句'中的未知列'user_email'(SQL:select*from
memberswhereuser_email=?limit 1)(Bindings:array(0 =>'test@hotmail.com',))
表用户
CREATE TABLE IF NOT EXISTS `festival_aid`.`users` (
`user_id` BIGINT NOT NULL AUTO_INCREMENT,
`user_email` VARCHAR(45) NOT NULL,
`user_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`user_modified` TIMESTAMP NULL,
`user_deleted` TIMESTAMP NULL,
`user_lastlogin` TIMESTAMP NULL,
`user_locked` TIMESTAMP NULL,
PRIMARY KEY (`user_id`),
UNIQUE INDEX `user_email_UNIQUE` (`user_email` ASC),
ENGINE = InnoDB;
Run Code Online (Sandbox Code Playgroud)
表成员
CREATE TABLE IF NOT EXISTS `festival_aid`.`members` (
`member_id` BIGINT NOT NULL AUTO_INCREMENT,
`member_password` CHAR(32) NOT NULL,
`member_salt` CHAR(22) NOT NULL,
`member_token` VARCHAR(128) NULL, …Run Code Online (Sandbox Code Playgroud) 我正在使用Rails 3,我需要做一个选择,其中记录的主键是在结果先前的选择中.您可以使用IN直接使用SQL来轻松完成此操作.这是我做了我需要的明显不正确的方法.什么是Rails方式做得好:
@task = Link.find(params[:id])
clients = Client.where('task_id = ?',@task.id).select('DISTINCT(company_id)')
company_list = []
clients.each do |client|
company_ids << client.company_id
end
@companies = Company.where(:id => company_ids)
Run Code Online (Sandbox Code Playgroud) 有没有办法(没有JOIN)WHERE在2列(OR)IN子查询上使用子句?目前,我正在做
WHERE 'col1' IN
(
SELECT id FROM table
) OR 'col2' IN
(
SELECT id FROM table
)
Run Code Online (Sandbox Code Playgroud)
而且我相信我能做得更好:).我也试过,WHERE ('col1', 'col2') IN <subquery>但MySQL说:Operand should contain 2 column(s)
谢谢你的帮助.
编辑:通过"不加入",我的意思是我正在进行许多加入:http://pastebin.com/bRfD21W9 ,正如您所看到的,子查询位于另一个表上.
where-clause ×10
mysql ×3
sql ×3
sql-server ×2
codeigniter ×1
haskell ×1
in-subquery ×1
join ×1
laravel ×1
linq ×1
linq-to-sql ×1
php ×1
select ×1
swift ×1
syntax ×1
union ×1
where ×1