SQLite:多表连接(SQLite: Multiple Table Join)
我有一个简单的两个很多关系。
有三张桌子
主要:
ID TITLE
________
1 Peter
2 Lars
命令:
SKU MAIN_ID
___________
RFX 1
HNI 2
RRP 2
工具:
NAME MAIN_ID
____________
FORK 1
KNIFE 1
SPOON 2
因此,订单和工具有一个MAIN_ID ,它引用Main表。 所以Peter有订单RFX,工具FORK和SPOON Lars有订单HNI和RRP以及工具SPOON。
我如何进行单一查询以找出彼得有哪些订单和工具以及哪些订单和工具有? 我尝试了内部连接但是有重复的条目。
I have a simple one two many relationship.
There are three tables
Main:
ID TITLE
________
1 Peter
2 Lars
Orders:
SKU MAIN_ID
___________
RFX 1
HNI 2
RRP 2
Tools:
NAME MAIN_ID
____________
FORK 1
KNIFE 1
SPOON 2
So orders and tools hava a MAIN_ID which refers to the Main table. So Peter has the order RFX and the tools FORK and SPOON Lars has the orders HNI and RRP and the tool SPOON.
How can I do a single query to find out which orders and tools peter has and which ones lars has? I tried it with an inner join but then there are duplicate entries.
原文:https://stackoverflow.com/questions/33600589
2019-12-16 16:12
满意答案
您可能希望使用group_concat()来获取一行中的值。 但是,您需要在join之前预先聚合数据:
select m.*, o.skus, t.tools
from main m join
(select main_id, group_concat(sku) as skus
from orders
group by main_id
) o
on o.main_id = m.id join
(select main_id, group_concat(name) as tools
from tools
group by main_id
) t
on t.main_id = m.id;
You probably want to use group_concat() to get the values in one row. However, you need to pre-aggregate the data before the join:
select m.*, o.skus, t.tools
from main m join
(select main_id, group_concat(sku) as skus
from orders
group by main_id
) o
on o.main_id = m.id join
(select main_id, group_concat(name) as tools
from tools
group by main_id
) t
on t.main_id = m.id;
2015-11-09
相关问答
问题在于你希望SQLite具有与完整RDBMS相同的性能特征。 它不会。 SQLLite在内存中没有足够的缓存空间,每次运行应用程序时都必须重新构建缓存,可能仅限于设置内核数量等,等等。使用嵌入式RDBMS的权衡超过一个完整的。 就优化而言,尝试索引查找列并进行测试。 然后尝试创建一个覆盖索引。 一定要测试更新数据库的selects和代码路径,你会以牺牲另一个为代价加快速度。 找到适合您需求的两种最佳平衡的索引,并与之配合。 The problem is that you're expecting...
此查询应该有效: select fi.name, fi.birthday, fi.note, fi.pic, ii.itemname, ii.price, ii.storename
from friendinfo fi
inner join iteminfo ii on ii.friendid = fi.friendid
where fi.friendid = ?
This query should work: select fi.name, fi.birthday, fi.note, fi.p...
假设您加入的字段已编入索引/或最好使用FOREIGN KEY约束(强制执行索引)定义,您应该没问题。 但是,MySQL并不总是使用索引,即使它们可用。 要检查索引是否正在使用,您可以在语句上运行解释,即 EXPLAIN
SELECT d.* FROM service_contacts a
LEFT JOIN lists b
ON a.calllistid=b.listid
LEFT JOIN contact_list_relationship c
ON c.listid=b...
JOIN加入两个表,所以它需要两个表名。 但traits.trait_id不是表名。 看起来你想加入traits表,所以删除.trait_id 。 (并且当两个列具有相同的名称时,使用USING更简单。) SELECT ...
FROM trait_categories
JOIN trait_categories_traits USING (trait_category_id)
JOIN traits USING (trait_id);
JOIN joins t...
我认为你想要相关的子查询: update tbl_orderitems
set order_id = (select o.id from tbl_orders o where o.order_number = tbl_orderitems.order_number)
where exists (select 1
from tbl_orders o
where o.order_number = tbl_orde...
尝试这个? SELECT a.id, a.name,
c.name as category,
group_concat(subcat.name) as subcategories
FROM accounts AS a
INNER JOIN account_has_subcategory AS ahs ON a.id = ahs.account_id
INNER JOIN subcategory AS subcat ON subcat.id = ahs.subcat_...
您的问题在表的数据布局上不清楚,但查询看起来像这样: select . . .
from ps_order_detail od join
ps_orders o
using (id_order) join
ps_customer c
using (id_customer) join
ps_carrier ca
using (id_carrier)
Your question is unclear on the data layouts...
问题是在LEFT JOIN中放置条件'AND test1.c1 = 1'。 它应该放在WHERE中,如下所示: SELECT test1.c1, test2.c2, test3.c3
FROM test1
LEFT JOIN test2 ON test1.c1=test2.c1
LEFT JOIN test3 ON test2.c2=test3.c2
where test1.c1 = 1
当您在LEFT JOIN(也是OUTER和RIGHT)中添加其他条件时,所有不匹配的记录都将获得空值,并从...
您可能希望使用group_concat()来获取一行中的值。 但是,您需要在join之前预先聚合数据: select m.*, o.skus, t.tools
from main m join
(select main_id, group_concat(sku) as skus
from orders
group by main_id
) o
on o.main_id = m.id join
(select main_id, grou...
查询: SELECT firstname, height
FROM table1 INNER JOIN table2 ON table1.id=table2.id
INNER JOIN table3 ON table2.lastname=table3.lastname
Query: SELECT firstname, height
FROM table1 INNER JOIN table2 ON table1.id=table2.id
INNER ...
相关文章
一下是我写的代码。。。创建主外键的关联 或者谁有个可以运行的例子给我介绍下也行。。。。。 db.exe
...
原来的系统性能慢,今天在做性能调优,发现有一个多表查询存在性能问题。 我的hbm.xml配置文件
...
表1:online :videoId name, num 表2:ok: id num 怎么把表1和
...
datajoin包在Hadoop的contrib目录下,我们也可以在src下面看见其源码,它的源码很小
...
CROSS-DOCUMENT JOINS solr 的join相当于SQL的nested join;s
...
多表关联和单表关联类似,它也是通过对原始数据进行一定的处理,从其中挖掘出关心的信息。如下 输入的是两个
...
如果出现如下错误: >>> import sqlite3 Traceback (mo
...
作用: 描述具体的表规则 属性: name – 声明 table 名字,当命中 sql 中的 tabl
...
想要实现这个一个Table,table的padding和下面的黑线一直实现不了,求各位大牛指点。
...
最新问答
如果启用了复制处理程序,请确保将其置于其中一个安全角色之后。 我见过人们做的另一件事是在不同的端口上运行admin。 最好在需要auth的页面上使用SSL,这样你就不会发送明确的密码,因此管理和复制将发生在8443上,而常规查询将在8080上发生。 如果您要签署自己的证书,请查看此有用的SO页面: 如何在特定连接上使用不同的证书? I didn't know that /admin was the context for SOLR admin because /admin does not re
第一:在您的样本中,您有: 但是你在询问 //td[@class=‘CarMiniProfile-TableHeader’] (注意TableHeader中的大写'T')。 xpath区分大小写。 第二:通过查询// td [@ class ='CarMiniProfile-TableHeader'] / td,你暗示你在外部td中有一个'td'元素,而它们是兄弟姐妹。 有很多方法可以在这里获得制作和模型
这是你的答案: http://jsfiddle.net/gPsdk/40/ .preloader-container { position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px; background: #FFFFFF; z-index: 5; opacity: 1; -webkit-transition: all 500ms ease-out;
问题是,在启用Outlook库引用的情况下, olMailItem是一个保留常量,我认为当您将Dim olMailItem as Outlook.MailItem ,这不是问题,但是尝试设置变量会导致问题。 以下是完整的解释: 您已将olMailItem声明为对象变量。 在赋值语句的右侧,在将其值设置为对象的实例之前,您将引用此Object 。 这基本上是一个递归错误,因为你有对象试图自己分配自己。 还有另一个潜在的错误,如果之前已经分配了olMailItem ,这个语句会引发另一个错误(可能是
我建议使用wireshark http://www.wireshark.org/通过记录(“捕获”)设备可以看到的网络流量副本来“监听”网络上发生的对话。 当您开始捕获时,数据量似乎过大,但如果您能够发现任何看起来像您的SOAP消息的片段(应该很容易发现),那么您可以通过右键单击并选择来快速过滤到该对话'关注TCP Stream'。 然后,您可以在弹出窗口中查看您编写的SOAP服务与Silverlight客户端之间的整个对话。 如果一切正常,请关闭弹出窗口。 作为一个额外的好处,wireshar
Android默认情况下不提供TextView的合理结果。 您可以使用以下库并实现适当的aligntment。 https://github.com/navabi/JustifiedTextView Android Does not provide Justified aligntment of TextView By default. You can use following library and achieve proper aligntment. https://github.com/
你的代码适合我: class apples { public static void main(String args[]) { System.out.println("Hello World!"); } } 我将它下载到c:\ temp \ apples.java。 以下是我编译和运行的方式: C:\temp>javac -cp . apples.java C:\temp>dir apples Volume in drive C is HP_PAV
12个十六进制数字(带前导0x)表示48位。 那是256 TB的虚拟地址空间。 在AMD64上阅读wiki(我假设你在上面,对吗?)架构http://en.wikipedia.org/wiki/X86-64 12 hex digits (with leading 0x) mean 48 bits. That is 256 TB of virtual address space. Read wiki on AMD64 (I assume that you are on it, right?) ar
这将取决于你想要的。 对象有两种属性:类属性和实例属性。 类属性 类属性对于类的每个实例都是相同的对象。 class MyClass: class_attribute = [] 这里已经为类定义了MyClass.class_attribute ,您可以使用它。 如果您创建MyClass实例,则每个实例都可以访问相同的class_attribute 。 实例属性 instance属性仅在创建实例时可用,并且对于类的每个实例都是唯一的。 您只能在实例上使用它们。 在方法__init__中定