使用是否始终是最佳做法 -
Select E.Id,D.DeptName from Employee E join Dept D on E.DeptId=D.Id
Run Code Online (Sandbox Code Playgroud)
代替 -
Select Employee.Id,Dept.DeptName from Employee join Dept on Employee.DeptId=Dept.Id
Run Code Online (Sandbox Code Playgroud)
除了可读性和减少查询的长度,使用别名有什么好处?当我咨询我们的数据库专家时,他说查询可能会破坏,如果有时候没有别名 ......我完全不理解......如果有人愿意分享他们的想法以及要遵循的最佳做法,我将不胜感激. .非常感谢.
我得到2个名字作为第一个查询的输出....例如:paul,peter现在这应该是第二个查询的输入,它必须显示paul和peter的电子邮件ID ....
假设我有一个名为Transaction的表和另一个名为Price的表.价格保留不同日期的给定资金的价格.每个基金都会在不同的日期添加价格,但他们不会在所有可能的日期都有价格.因此,对于XYZ基金,我可能有5月1日,5月7日和5月13日的价格,基金ABC可能会在5月3日,5月9日和5月11日有价格.
所以现在我正在考虑交易之日基金普遍存在的价格.该交易是在5月10日为XYZ基金进行的.我想要的是当天最新的已知价格,这将是5月7日的价格.
这是代码:
select d.TransactionID, d.FundCode, d.TransactionDate, v.OfferPrice
from Transaction d
inner join Price v
on v.FundCode = d.FundCode
and v.PriceDate = (
select max(PriceDate)
from Price
where FundCode = v.FundCode
/* */ and PriceDate < d.TransactionDate
)
Run Code Online (Sandbox Code Playgroud)
它有效,但速度非常慢(在现实世界中使用几分钟).如果我删除带有前导注释的行,则查询非常快(大约2秒),但它会使用每个基金的最新价格,这是错误的.
不好的是,与我们使用的其他一些表相比,价格表是微不足道的,我不清楚它为什么这么慢.我怀疑违规行迫使SQL Server处理笛卡尔积,但我不知道如何避免它.
我一直希望找到一种更有效的方法来做到这一点,但到目前为止它已经逃过了我.有任何想法吗?
我有这个查询非常具体,并返回我需要的.众所周知,mysql中的嵌套查询在运行时方面可能非常糟糕.如果有人可以帮助我将以下代码转换为JOIN声明,我将非常感激.
当然,欢迎并鼓励任何其他优化.
SELECT title
FROM exp_channel_titles
WHERE entry_id IN (SELECT rel_child_id
FROM exp_relationships
WHERE rel_id IN (SELECT field_id_202
FROM exp_channel_data
WHERE entry_id = 19971));
Run Code Online (Sandbox Code Playgroud)
谢谢!
我试图通过List中包含的Map的内容过滤DynamoDB查询.这是我正在处理的结构的一个例子.
{
'EventType': 'git/push'
'EventTime': 1416251010,
'Commits': [
{
'id': '29d02aff...',
'subject': 'Add the thing to the place'
},
{
'id': '9d888fec...',
'subject': 'Spelling errors'
},
...
]
}
Run Code Online (Sandbox Code Playgroud)
散列键是EventType和范围键EventTime.我正在尝试编写一个过滤器,将查询结果过滤到特定的id.是否可以创建一个正确过滤查询的DynamoDB过滤器表达式?(我的第一个想法是使用contains (a, a),但我认为这不适用于地图列表.)
我正在尝试搜索所有具有 RentItem 且书名类似于给定 $input 的 Rent。
问题是当输入不匹配时,我仍然返回一个集合。唯一的区别是 book 关系为 null 而不是集合。
应返回 false 的查询结果:https : //pastebin.com/pd7UqhCi
查询结果为真:https : //pastebin.com/shndvdMh
当 book 等于 null 时,我不希望返回 Rent 模型。
我的查询
$rents = Rent::with(['rentItems.book' => function ($query) use ($input) {
$query->where('books.title', 'LIKE', "%$input%");
}])->get();
Run Code Online (Sandbox Code Playgroud)
租模型关系
public function rentItems()
{
return $this->hasMany(RentItem::class);
}
Run Code Online (Sandbox Code Playgroud)
RentItems 模型关系
public function book()
{
return $this->belongsTo(Book::class);
}
public function rent()
{
return $this->belongsTo(Rent::class);
}
Run Code Online (Sandbox Code Playgroud)
我做过的研究:
我可以以某种方式连接表并避免在以下MySQL查询中使用distinct.invite_by_id显示邀请此用户的用户ID.
SELECT
user1.id, count(distinct user2.id) AS theCount, count(distinct user3.id) AS theCount2
FROM
users AS user1
LEFT OUTER JOIN
users AS user2 ON user2.invited_by_id=user1.id
LEFT OUTER JOIN (
SELECT id, invited_by_id FROM users WHERE signup_date >= NOW() - INTERVAL 30 DAY
) AS user3 ON user3.invited_by_id=user1.id
GROUP BY user1.id;
Run Code Online (Sandbox Code Playgroud) 我一直在尝试为公共交通系统编写一个查询,当我输入原点和目的地站号时,它将输出一个路径列表.
这是我的MySQL表:
mysql> desc route_timings;
+----------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+---------+------+-----+---------+----------------+
| ID | int(11) | NO | PRI | NULL | auto_increment |
| route_number | int(11) | NO | | NULL | |
| stop_number | int(11) | NO | | NULL | |
| arrival_time | time | YES | | NULL | |
| departure_time | time | YES | | NULL | |
+----------------+---------+------+-----+---------+----------------+
5 rows …Run Code Online (Sandbox Code Playgroud) From performance perspective , is this the best way to write the following query concerning the nested query :
SELECT a.meg,a.currency
FROM alt6sal a
WHERE a.meg_code IN (1,2)
AND a.sal_year = (SELECT MAX(ia.sal_year) FROM alt6sal ia WHERE a.emp_num = ia.emp_num )
AND a.sal_mon = (SELECT MAX(ia.sal_mon) FROM alt6sal ia WHERE a.emp_num = ia.emp_num AND a.sal_year = ia.sal_year)
Run Code Online (Sandbox Code Playgroud) 拥有一个表用户,并且有一个字段invite_by_id显示邀请该用户的用户ID.需要使MySQL查询返回包含用户所有字段的行以及invites_count字段,以显示每个用户邀请的人数.像这样的东西:
SELECT
User.*, Count.count
FROM
users AS User,
(
SELECT COUNT(*) AS count FROM users WHERE users.invited_by_id=User.id
) AS Count;
Run Code Online (Sandbox Code Playgroud)
这个没有用,所以我需要一个工作的.
nested-queries ×10
sql ×7
mysql ×4
join ×2
alias ×1
collections ×1
informix ×1
laravel ×1
nosql ×1
oracle ×1
oracle10g ×1
performance ×1
php ×1
sql-server ×1