标签: join

MySQL中逗号分隔的连接和语法连接之间有什么区别?

例如,如果我有一个表"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)

谢谢

mysql sql syntax join

86
推荐指数
4
解决办法
7万
查看次数

何时使用STRAIGHT_JOIN与MySQL

我刚刚处理了一个相当复杂的查询,并且需要8秒才能运行.EXPLAIN显示了一个奇怪的表顺序,即使使用FORCE INDEX提示我的索引也没有被使用.我遇到了STRAIGHT_JOIN join关键字并开始用它替换我的一些INNER JOIN关键字.我注意到速度提升了很多.最后我用STRAIGHT_JOIN替换了所有我的INNER JOIN关键字用于此查询,它现在在.01秒内运行.

我的问题是你什么时候使用STRAIGHT_JOIN,什么时候使用INNER JOIN?如果您正在撰写好的查询,是否有任何理由不使用STRAIGHT_JOIN?

mysql join

84
推荐指数
7
解决办法
5万
查看次数

sqlalchemy:如何通过一个查询连接多个表?

我有以下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)

谢谢,

python sql join sqlalchemy

83
推荐指数
4
解决办法
11万
查看次数

如何在LINQ lambda中的多个表之间执行连接

我试图在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)

c# linq lambda join multiple-tables

83
推荐指数
4
解决办法
19万
查看次数

MySQL只加入最近一行?

我有一个表客户,存储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之间的区别.我现在要调查它!)

mysql sql join

81
推荐指数
5
解决办法
8万
查看次数

加入列表中的元素对 - Python

我知道列表可以连接成一个长字符串,如:

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)

python string join list

81
推荐指数
3
解决办法
17万
查看次数

在python中加入一个字符串列表,并用引号将每个字符串包装起来

我有:

words = ['hello', 'world', 'you', 'look', 'nice']
Run Code Online (Sandbox Code Playgroud)

我希望有:

'"hello", "world", "you", "look", "nice"'
Run Code Online (Sandbox Code Playgroud)

使用Python最简单的方法是什么?

python string join list

81
推荐指数
5
解决办法
5万
查看次数

将子查询中的多个结果合并为一个逗号分隔值

我有两张桌子:

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是否可行?

t-sql sql-server join

80
推荐指数
4
解决办法
14万
查看次数

1052:字段列表中的列'id'不明确

我有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)

我可以选择所有字段并避免错误.但这将是对性能的浪费.我该怎么办?

mysql sql database join mysql-error-1052

80
推荐指数
6
解决办法
30万
查看次数

LINQ在On子句中加入多个条件

我正在尝试在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文档.

linq join

80
推荐指数
2
解决办法
11万
查看次数