如何从customers1和customers2获取所有产品包括他们的客户名称?
customer1 table
cid name1
1 john
2 joe
customer2 table
cid name2
p1 sandy
p2 linda
product table
pid cid pname
1 1 phone
2 2 pencil
3 p1 pen
4 p2 paper
Run Code Online (Sandbox Code Playgroud)
结果应该是这样的
pid cid pname name1 name2
1 1 phone john NULL
2 2 pencil joe NULL
3 p1 pen NULL sandy
4 p2 paper NULL linda
Run Code Online (Sandbox Code Playgroud) 我有两个具有相似列名的表,我需要从左表中返回在右表中找不到的记录?我有一个主键(列),可以帮助我比较两个表.哪个加入是首选?
我继承了一个没有完全优化设计的数据库,我需要操作一些数据.让我对我必须做的事情做一个更常见的比喻:
假设我们有一张Student桌子,一张StudentClass桌子记录了他参加的所有课程,还有一张StudentTeacher桌子可以存储教授这名学生的所有老师.是的,我知道这是一个愚蠢的设计,将老师存放在Class表上更有意义 - 但这就是我们正在使用的.
我现在想要清理数据,我想找到一个学生有老师但没有上课但是上课但没有老师的所有地方.SQL因此:
select *
from StudentClass sc
full outer join StudentTeacher st on st.StudentID = sc.StudentID
where st.id is null or sc.id is null
Run Code Online (Sandbox Code Playgroud)
你是怎么在Linq那样做的?
有人可以帮我写一个像这样的scernerio sql:
Table 1
2 columns: ID, Name
Table 2
2 columns: ID, Name
Run Code Online (Sandbox Code Playgroud)
我想要一个查询来显示表1中不在表2中的名称.因此,过滤掉表2中表2中的所有名称是结果查询.使用ID进行过滤而不是名称.
这将帮助我做我想做的事情.提前致谢
我以为我理解左外连接是如何工作的,但是我的情况不起作用,而且我不能100%确定我的查询结构是否不正确,或者是否是数据问题.
对于后台,我有以下MySQL表结构:
mysql> describe achievement;
+-------------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------------------+------+-----+---------+-------+
| id | varchar(64) | NO | PRI | NULL | |
| game_id | varchar(10) | NO | PRI | NULL | |
| name | varchar(64) | NO | | NULL | |
| description | varchar(255) | NO | | NULL | |
| image_url | varchar(255) | NO | | NULL | |
| gamerscore | …Run Code Online (Sandbox Code Playgroud) 很容易理解为什么左外连接不是可交换的,但是我在理解它们是否是关联时遇到了一些麻烦.一些在线消息来源表示他们不是,但我没有设法说服自己这是事实.
假设我们有三个表:A,B和C.
设A包含两列,ID和B_ID,其中ID是表A的主键,B_ID是对应于表B的主键的外键.
设B包含两列,ID和C_ID,其中ID是表B的主键,C_ID是对应于表C的主键的外键.
设C包含两列,ID和VALUE,其中ID是表C的主键,VALUE只包含一些任意值.
那不(A left outer join B) left outer join C应该等于A left outer join (B left outer join C)?
我想使用Criteria API在两个表之间执行LEFT OUTER JOIN.我在Hibernate文档中找到的就是这个方法:
Criteria criteria = this.crudService
.initializeCriteria(Applicant.class)
.setFetchMode("products", FetchMode.JOIN)
.createAlias("products", "product");
Run Code Online (Sandbox Code Playgroud)
但是,这会执行内部联接或右外部联接,因为它返回的结果数量.
我也希望我的加入是懒惰的.我怎样才能做到这一点?
干杯!
更新:似乎使用别名会自动连接INNER JOIN."背景故事"中还有一些我还没有掌握的东西.所以,今天没有别名.这给我留下了对两个表应用限制的问题,因为它们都有一个列(或属性,如果这更合适)' name '.
对你们来说也许是一个facepalm,但作为一个SQL查询新手,我有一个语法问题.谁知道什么是错的?
SELECT * FROM company C
OUTER JOIN company_address A ON C.company_id = A.company_id
WHERE A.company_id IS NULL
Run Code Online (Sandbox Code Playgroud)
给出错误:
#1064 - You have an error in your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use near
'OUTER JOIN company_address A ON C.company_id = A.company_id WHERE A.address_id
' at line 2
Run Code Online (Sandbox Code Playgroud) 在data.tableFAQ中,该nomatch = NA参数被称为类似于外连接.但是,我一直没能得到data.table做一个全外连接-只有右外连接.
例如:
a <- data.table("dog" = c(8:12), "cat" = c(15:19))
dog cat
1: 8 15
2: 9 16
3: 10 17
4: 11 18
5: 12 19
b <- data.table("dog" = 1:10, "bullfrog" = 11:20)
dog bullfrog
1: 1 11
2: 2 12
3: 3 13
4: 4 14
5: 5 15
6: 6 16
7: 7 17
8: 8 18
9: 9 19
10: 10 20
setkey(a, dog) …Run Code Online (Sandbox Code Playgroud) 我试图理解LINQ to Entity中的左外连接.例如,我有以下3个表:
公司,公司产品,产品
CompanyProduct链接到其两个父表,Company和Product.
我想要返回所有公司记录和关联的CompanyProduct,无论CompanyProduct是否存在给定产品.在Transact SQL中,我将使用左外连接从Company表中进行如下操作:
SELECT * FROM Company AS C
LEFT OUTER JOIN CompanyProduct AS CP ON C.CompanyID=CP.CompanyID
LEFT OUTER JOIN Product AS P ON CP.ProductID=P.ProductID
WHERE P.ProductID = 14 OR P.ProductID IS NULL
Run Code Online (Sandbox Code Playgroud)
我的数据库有3个公司,2个CompanyProduct记录与ProductID 14相关联.因此SQL查询的结果是预期的3行,其中2行连接到CompanyProduct和Product,1个只有Company表和null在CompanyProduct和Product表中.
那么如何在LINQ to Entity中编写相同类型的连接来实现类似的结果呢?
我尝试了一些不同的东西,但无法正确的语法.
谢谢.
outer-join ×10
join ×6
sql ×4
left-join ×2
mysql ×2
c# ×1
criteria ×1
data.table ×1
hibernate ×1
inner-join ×1
linq ×1
linq-to-sql ×1
r ×1
select ×1
sql-server ×1
syntax ×1
t-sql ×1