我的问题非常类似于限制LEFT JOIN,带有变化.
假设我有一个表SHOP和另一个表LOCATION.表位是表SHOP的一种子表,它有两列感兴趣的,一个是分区键(称之为KEY)和一个"SHOP"号.这与表SHOP中的数字"NO"匹配.
我试过这个左外连接:
SELECT S.NO, L.KEY
FROM SHOP S
LEFT OUTER JOIN LOCATN L ON S.NO = L.SHOP
Run Code Online (Sandbox Code Playgroud)
但由于有很多地方属于一家商店,因此我得到了很多重复.我想消除它们,只是得到一个没有重复的"商店,关键"条目列表.
数据正确但重复显示如下:
SHOP KEY
1 XXX
1 XXX
2 YYY
3 ZZZ
3 ZZZ etc.
Run Code Online (Sandbox Code Playgroud)
我希望数据看起来像这样:
SHOP KEY
1 XXX
2 YYY
3 ZZZ etc.
Run Code Online (Sandbox Code Playgroud)
购物台:
NO
1
2
3
Run Code Online (Sandbox Code Playgroud)
位置表:
LOCATION SHOP KEY
L-1 1 XXX
L-2 1 XXX
L-3 2 YYY
L-4 3 YYY
L-5 3 YYY
Run Code Online (Sandbox Code Playgroud)
(ORACLE 10g数据库)
如何在LINQ中编写子选择.
如果我有一个客户列表和一个订单列表,我希望所有没有订单的客户.
这是我的伪代码尝试:
var res = from c in customers
where c.CustomerID ! in (from o in orders select o.CustomerID)
select c
Run Code Online (Sandbox Code Playgroud) 有一个类与类Offer
有可选的关系Article
.因此,某些商品物品属性具有null
价值.
如果我使用以下声明,一切正常.我得到了所有的报价,甚至那些没有文章的报价.
SELECT o FROM Offer o
LEFT OUTER JOIN o.article a
LEFT OUTER JOIN o.vendor v
WHERE v.number = '0212' OR a.nummer = '123456'
Run Code Online (Sandbox Code Playgroud)
如果我将声明更改为:
SELECT o FROM Offer o
LEFT OUTER JOIN o.article a
LEFT OUTER JOIN o.vendor v
WHERE v.number = '0212' OR o.article.nummer = '123456'
Run Code Online (Sandbox Code Playgroud)
我只得到这些提供不同的文章NULL
.这是因为隐式连接(o.article.nummer
)的表示法强制内连接.
是否有可能强制左外连接为隐式连接(注释驱动或其他)?如果有可能我可以使用这样的简短形式:
SELECT o FROM Offer o
WHERE v.number = '0212' OR o.article.nummer = '123456'
Run Code Online (Sandbox Code Playgroud) 我在ProductDfn类中有这样的hibernate映射
@ManyToOne( fetch = FetchType.LAZY, optional = true )
@JoinColumn( name = "productTypeFk", nullable = true )
public ProductType getProductType()
{
return productType;
}
Run Code Online (Sandbox Code Playgroud)
请注意,该关系被定义为可选(并且该列可以为空).
做HQL的时候是这样的
select p.name as col1, p.productType.name as col2 from ProductDfn p
Run Code Online (Sandbox Code Playgroud)
内部联接用于将ProductDfn连接到ProductType,因为hibernate从select子句中的隐式连接生成显式SQL连接.
但是,当执行上述操作时,如果productType为null(在DB中),则由于内部联接而不返回任何行.对于这种关系,我希望hibernate默认为执行外连接(因为关系是可选的)所以我会得到col2的"null",而不是没有行.
有谁知道这是否可能?
谢谢.
我在SQLAlchemy 0.6.8中使用ORM Mapping.
我有三个表(A,B和C),它们之间没有外键.
我正在尝试连接表A和B,然后使用C离开外连接.我期待一个名为元组,字段A,B和C - C字段有时设置为None.)
只需选择两个表格,我就可以轻松完成第一次连接.
(session.query(A, B)
.filter(A.some_field = B.some_other_field))
Run Code Online (Sandbox Code Playgroud)
这让我得到一个带有字段A和B的NamedTuple.
然后我添加外连接,使其成为:
(session.query(A, B)
.filter(A.some_field==B.some_other_field))
.outerjoin((C, A.some_field==C.some_different_field))
Run Code Online (Sandbox Code Playgroud)
结果仍然只有两个表.我无法访问C的其他字段(即使在它们存在的情况下).
执行左外连接的正确方法是什么,才能访问最右边的表的字段?
如果我可以避免它,我宁愿不回退到基本的SQL - 我正在努力学习利用ORM.
我正在将遗留的SQLS2k迁移到2008R2,似乎所有数据访问都是通过存储过程完成的,并且任何自定义查询都使用旧的*=
=*
外连接语法.有超过一百个proc所以我不想单独打开每一个以查看它是否使用该语法(大多数不会),是否有一种方法可以查询元数据以获取一个procs/functions/views列表/触发器,然后循环搜索*=
或=*
字符串,打印出违规对象的名称?
我的背景是oracle,我知道如何在那里找到元数据视图,但我对Sql Server有点新.降级兼容性版本不是一种选择.
谢谢!
在这个例子中,我们在SQLite数据库上有3个相关的表:
CREATE TABLE test1 (
c1 integer,
primary key (c1)
);
CREATE TABLE test2 (
c1 integer,
c2 integer,
primary key (c1, c2)
);
CREATE TABLE test3 (
c2 integer,
c3 integer,
primary key (c2)
);
Run Code Online (Sandbox Code Playgroud)
现在我需要加入所有表格:
test1 -> test2 (with c1 column) test2 -> test3 (with c2 column).
我试过这个解决方案,但它没有运行:
SELECT
*
FROM test1 a
LEFT OUTER JOIN test2 b
LEFT OUTER JOIN test3 c
ON c.c2 = b.c2
ON b.c1=a.c1
Run Code Online (Sandbox Code Playgroud)
它给了我一个错误:
near "ON": syntax error.
有帮助吗?
今天在玩动态查询生成时,我发现mysql在连接中可以使用多少个表的最大限制是硬的:61.
这让我对PostgreSQL感到好奇,PostgreSQL有类似的限制吗?
注意:我出于好奇而不是需要这样做.
如何在LINQ中实现外部应用?我有一点问题.
这是我正在使用的SQL查询.
SELECT u.masterID
,u.user
,h.created
FROM dbo.Users u
OUTER APPLY (SELECT TOP 1 * FROM UserHistory h where h.masterID = u.masterID ORDER BY created DESC) h
Run Code Online (Sandbox Code Playgroud) 如何编写一个oracle查询,它等同于informix中的以下查询:
select tab1.a,tab2.b,tab3.c,tab4.d
from table1 tab1,
table2 tab2 OUTER (table3 tab3,table4 tab4,table5 tab5)
where tab3.xya = tab4.xya
AND tab4.ss = tab1.ss
AND tab3.dd = tab5.dd
AND tab1.fg = tab2.fg
AND tab4.kk = tab5.kk
AND tab3.desc = "XYZ"
Run Code Online (Sandbox Code Playgroud)
我试过:
select tab1.a,tab2.b,tab3.c,tab4.d
from table1 tab1,
table2 tab2 LEFT OUTER JOIN (table3 tab3,table4 tab4,table5 tab5)
where tab3.xya = tab4.xya
AND tab4.ss = tab1.ss
AND tab3.dd = tab5.dd
AND tab1.fg = tab2.fg
AND tab4.kk = tab5.kk
AND tab3.desc = "XYZ"
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助我获得正确的语法.
outer-join ×10
join ×3
sql ×3
c# ×2
hibernate ×2
linq ×2
oracle ×2
.net ×1
hql ×1
jpa ×1
jql ×1
left-join ×1
nullable ×1
oracle10g ×1
orm ×1
postgresql ×1
sql-server ×1
sqlalchemy ×1
sqlite ×1