如何使用PHP CodeIgniter框架的活动记录查询格式进行UNION查询?
我有一个表,我想要一个查询,返回创建的最后10条记录加上id为x的记录.
我正在努力 -
SELECT * FROM catalog_productimage
ORDER BY date_modified
LIMIT 10
UNION
SELECT * FROM catalog_productimage
WHERE id=5;
Run Code Online (Sandbox Code Playgroud)
但它看起来不像我LIMIT之前可以放在那里UNION.我尝试添加另一列并使用它进行排序 -
SELECT id, date_modified, IF(false, 1, 0) as priority FROM catalog_productimage
UNION
SELECT, id, date_modified, IF(true, 1, 0) as priority FROM catalog_productimage
WHERE id=5
ORDER BY priority, date_modified
LIMIT 10;
Run Code Online (Sandbox Code Playgroud)
但我没有取得多大进展..
我有三个表的联合(t1,t2,t3).每次重新运行完全相同的记录数,第一列是id,第二列是:
1 10
2 20
3 20
1 30
2 30
3 10
1 20
2 40
3 50
Run Code Online (Sandbox Code Playgroud)
是否有一个简单的SQL方式来总结它只得到:
1 60
2 80
3 80
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用UNION规则在单个表上执行多个查询
我有两张桌子:
我希望首先得到一组pinned设置为的行,true并用最新的条目填充剩余的(pinned设置为false)
SELECT
project.id AS project_id,
project.name AS project_name,
array_agg(json_build_object('skill_id', project_skills.id,'name', project_skills.skill)) AS skills
from project
LEFT OUTER JOIN project_skills on project.name = project_skills.project
WHERE project.pinned = true
GROUP BY project_id,project_name
UNION
SELECT
project.id AS project_id,
project.name AS project_name,
array_agg(json_build_object('skill_id', project_skills.id,'name', project_skills.skill)) AS skills
from project
LEFT OUTER JOIN project_skills on project.name = project_skills.project
WHERE project.id != 1 AND project.pinned = false
GROUP BY project_id,project_name
ORDER …Run Code Online (Sandbox Code Playgroud) 我有一个使用union的以下Transact SQL查询.我需要一些关于在LINQ中看起来如何看的指针,即一些例子会很好或者如果有人可以在linq上推荐一个关于UNIONS的好教程.
select top 10 Barcode, sum(ItemDiscountUnion.AmountTaken) from
(SELECT d.Barcode,SUM(AmountTaken) AmountTaken
FROM [Aggregation].[dbo].[DiscountPromotion] d
GROUP BY d.Barcode
UNION ALL
SELECT i.Barcode,SUM(AmountTaken) AmountTaken
FROM [Aggregation].[dbo].ItemSaleTransaction i
group by i.Barcode) ItemDiscountUnion
group by Barcode
Run Code Online (Sandbox Code Playgroud)
请注意,原始SQL正在 合并 2个选择NOT连接它们.我需要知道如何合并结果,即删除重复项,并根据条形码对存在重复的行数值求和.
如果我有两个序列并且我想要将它们一起处理,我可以将它们联合起来然后我们去.
现在假设我有一个项目,我想在两个序列之间处理.我可以通过创建一个包含单个项目的数组来获取它,但是有更简洁的方法吗?即
var top = new string[] { "Crusty bread", "Mayonnaise" };
string filling = "BTL";
var bottom = new string[] { "Mayonnaise", "Crusty bread" };
// Will not compile, filling is a string, therefore is not Enumerable
//var sandwich = top.Union(filling).Union(bottom);
// Compiles and works, but feels grungy (looks like it might be smelly)
var sandwich = top.Union(new string[]{filling}).Union(bottom);
foreach (var item in sandwich)
Process(item);
Run Code Online (Sandbox Code Playgroud)
是否有批准的方式,或者这是批准的方式?
谢谢
鉴于:
两个需要过滤的查询:
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.它 …
我正在执行该类型的多次迭代:
masterSet=masterSet.union(setA)
Run Code Online (Sandbox Code Playgroud)
随着集合的增长,执行这些操作所需的时间也在增长(正如人们所预料的那样,我猜).
我希望花时间检查setA的每个元素是否已经在masterSet中?
我的问题是,如果我知道masterSet还没有包含setA中的任何元素,我可以更快地做到这一点吗?
[UPDATE]
鉴于这个问题仍然吸引了观点,我想我会从以下评论和答案中清除一些问题:
虽然迭代虽然有许多迭代,我知道 这些迭代setA会masterSet因为它的构造方式而不同(不必处理任何检查),但是我需要进行一些迭代,我需要进行唯一性检查.
我想知道是否有一种方法可以"告诉" masterSet.union()程序不要再费心于这次的单一性检查了,因为我知道这一点不同于masterSet仅仅添加这些元素,很快就相信程序员的断言他们肯定会受到干扰.Perhpas通过调用一些不同的" .unionWithDistinctSet()"程序或其他东西.
我认为答案已经表明这是不可能的(并且真正设置操作应该足够快)但是使用masterSet.update(setA)而不是联合作为其稍微快一点.
我接受了最清楚的回应,解决了我当时遇到的问题并继续我的生活,但是如果我的假设.unionWithDistinctSet()能够存在,我仍然会喜欢听到这个问题吗?
是否可以从联盟的结果中进行选择?例如,我正在尝试做类似的事情:
SELECT A
FROM
(
SELECT A, B FROM TableA
UNION
SELECT A, B FROM TableB
)
WHERE B > 'some value'
Run Code Online (Sandbox Code Playgroud)
我错过了什么或假设这是如何工作的?我正在使用MSSQL 2005,因此任何解决方案都需要符合我在那里可以做的事情.
如何在t-sql中使用group by with union?我想按联合结果的第一列分组,我写了下面的sql但它不起作用.我只是不知道如何引用union结果的指定列(在本例中为1).十分感谢.
SELECT *
FROM ( SELECT a.id ,
a.time
FROM dbo.a
UNION
SELECT b.id ,
b.time
FROM dbo.b
)
GROUP BY 1
Run Code Online (Sandbox Code Playgroud) union ×10
sql ×6
c# ×2
linq ×2
mysql ×2
postgresql ×2
sql-server ×2
activerecord ×1
codeigniter ×1
group-by ×1
json ×1
limit ×1
python ×1
select ×1
set ×1
t-sql ×1
where-clause ×1