例如,如果我有一个表"Person",其列"id"引用表"Worker"中的列"id"
这两个查询之间有什么区别?它们产生相同的结果.
SELECT *
FROM Person
JOIN Worker
ON Person.id = Worker.id;
Run Code Online (Sandbox Code Playgroud)
和
SELECT *
FROM Person,
Worker
WHERE Person.id = Worker.id;
Run Code Online (Sandbox Code Playgroud)
谢谢
我刚刚处理了一个相当复杂的查询,并且需要8秒才能运行.EXPLAIN显示了一个奇怪的表顺序,即使使用FORCE INDEX提示我的索引也没有被使用.我遇到了STRAIGHT_JOIN join关键字并开始用它替换我的一些INNER JOIN关键字.我注意到速度提升了很多.最后我用STRAIGHT_JOIN替换了所有我的INNER JOIN关键字用于此查询,它现在在.01秒内运行.
我的问题是你什么时候使用STRAIGHT_JOIN,什么时候使用INNER JOIN?如果您正在撰写好的查询,是否有任何理由不使用STRAIGHT_JOIN?
我有以下SQLAlchemy映射类:
class User(Base):
__tablename__ = 'users'
email = Column(String, primary_key=True)
name = Column(String)
class Document(Base):
__tablename__ = "documents"
name = Column(String, primary_key=True)
author = Column(String, ForeignKey("users.email"))
class DocumentsPermissions(Base):
__tablename__ = "documents_permissions"
readAllowed = Column(Boolean)
writeAllowed = Column(Boolean)
document = Column(String, ForeignKey("documents.name"))
Run Code Online (Sandbox Code Playgroud)
我需要得到一个这样的表user.email = "user@email.com":
email | name | document_name | document_readAllowed | document_writeAllowed
Run Code Online (Sandbox Code Playgroud)
如何使用SQLAlchemy的一个查询请求?以下代码对我不起作用:
result = session.query(User, Document, DocumentPermission).filter_by(email = "user@email.com").all()
Run Code Online (Sandbox Code Playgroud)
谢谢,
我试图在LINQ中的多个表之间执行连接.我有以下课程:
Product {Id, ProdName, ProdQty}
Category {Id, CatName}
ProductCategory{ProdId, CatId} //association table
Run Code Online (Sandbox Code Playgroud)
我使用以下代码(其中product,category以及productcategory上述类的实例):
var query = product.Join(productcategory, p => p.Id, pc => pc.ProdID, (p, pc) => new {product = p, productcategory = pc})
.Join(category, ppc => ppc.productcategory.CatId, c => c.Id, (ppc, c) => new { productproductcategory = ppc, category = c});
Run Code Online (Sandbox Code Playgroud)
使用此代码,我从以下类中获取一个对象:
QueryClass { productproductcategory, category}
Run Code Online (Sandbox Code Playgroud)
producproductcategory的类型是:
ProductProductCategoryClass {product, productcategory}
Run Code Online (Sandbox Code Playgroud)
我不明白加入的"表"在哪里,我期待一个包含所涉及类的所有属性的单个类.
我的目标是使用查询产生的一些属性填充另一个对象:
CategorizedProducts catProducts = query.Select(m => new …Run Code Online (Sandbox Code Playgroud) 我有一个表客户,存储customer_id,电子邮件和参考.有存储的客户所做的更改历史记录的附加表CUSTOMER_DATA,即当有一个变化作出了新的行插入.
为了在一个表中显示客户信息,这两个表需要连接,但只有从CUSTOMER_DATA最近的行应连接到客户表.
它有点复杂,因为查询是分页的,所以有一个限制和一个偏移量.
我怎么能用MySQL做到这一点?我想我想在那里放一个DISTINCT ......
分钟的查询是这样的 -
SELECT *, CONCAT(title,' ',forename,' ',surname) AS name
FROM customer c
INNER JOIN customer_data d on c.customer_id=d.customer_id
WHERE name LIKE '%Smith%' LIMIT 10, 20
Run Code Online (Sandbox Code Playgroud)
另外,我是否正确地认为我可以用这种方式使用CONCAT?
(我很欣赏INNER JOIN可能是错误的JOIN类型.我实际上不知道不同JOIN之间的区别.我现在要调查它!)
我知道列表可以连接成一个长字符串,如:
x = ['a', 'b', 'c', 'd']
print ''.join(x)
Run Code Online (Sandbox Code Playgroud)
显然这会输出:
'abcd'
Run Code Online (Sandbox Code Playgroud)
但是,我想要做的只是加入列表中的第一个和第二个字符串,然后加入第三个和第四个,依此类推.简而言之,从上面的例子中取而代之的是输出:
['ab', 'cd']
Run Code Online (Sandbox Code Playgroud)
有没有简单的方法来做到这一点?我还应该提到列表中字符串的长度是不可预测的,列表中的字符串数也是如此,尽管字符串的数量总是均匀的.所以原始列表也可以是:
['abcd', 'e', 'fg', 'hijklmn', 'opq', 'r']
Run Code Online (Sandbox Code Playgroud) 我有:
words = ['hello', 'world', 'you', 'look', 'nice']
Run Code Online (Sandbox Code Playgroud)
我希望有:
'"hello", "world", "you", "look", "nice"'
Run Code Online (Sandbox Code Playgroud)
使用Python最简单的方法是什么?
我有两张桌子:
TableA
------
ID,
Name
TableB
------
ID,
SomeColumn,
TableA_ID (FK for TableA)
Run Code Online (Sandbox Code Playgroud)
这种关系是一排TableA- 许多TableB.
现在,我希望看到这样的结果:
ID Name SomeColumn
1. ABC X, Y, Z (these are three different rows)
2. MNO R, S
Run Code Online (Sandbox Code Playgroud)
这不起作用(子查询中有多个结果):
SELECT ID,
Name,
(SELECT SomeColumn FROM TableB WHERE F_ID=TableA.ID)
FROM TableA
Run Code Online (Sandbox Code Playgroud)
如果我在客户端进行处理,这是一个微不足道的问题.但这意味着我必须在每个页面上运行X查询,其中X是结果的数量TableA.
请注意,我不能简单地执行GROUP BY或类似的操作,因为它将为行返回多个结果TableA.
我不确定使用COALESCE或类似东西的UDF是否可行?
我有2张桌子.tbl_names并且tbl_section其中包含两个id领域.我如何选择该id字段,因为我总是收到此错误:
1052: Column 'id' in field list is ambiguous
Run Code Online (Sandbox Code Playgroud)
这是我的查询:
SELECT id, name, section
FROM tbl_names, tbl_section
WHERE tbl_names.id = tbl_section.id
Run Code Online (Sandbox Code Playgroud)
我可以选择所有字段并避免错误.但这将是对性能的浪费.我该怎么办?
我正在尝试在LINQ中实现一个查询,该查询在ON子句中使用具有多个条件的左外连接.
我将使用以下两个表Project(ProjectID,ProjectName)和Task(TaskID,ProjectID,TaskName,Completed)的示例.我想查看所有项目的完整列表及其各自的任务,但只查看已完成的任务.
我不能使用过滤器,Completed == true因为这将过滤掉任何没有完成任务的项目.相反,我想添加Completed == true到连接的ON子句,以便显示完整的项目列表,但只显示已完成的任务.没有完成任务的项目将显示一行,其中任务为空值.
这是查询的基础.
from t1 in Projects
join t2 in Tasks
on new { t1.ProjectID} equals new { t2.ProjectID } into j1
from j2 in j1.DefaultIfEmpty()
select new { t1.ProjectName, t2.TaskName }
Run Code Online (Sandbox Code Playgroud)
如何添加&& t2.Completed == trueon子句?
我似乎无法找到任何关于如何执行此操作的LINQ文档.