我有来自两个不同数据上下文的两个表.虽然两个表都来自同一个数据库,但存在两个独立的数据文件.
错误信息:
该查询包含对在不同数据上下文中定义的项的引用.
我怎么能绕过这个?任何帮助表示赞赏.谢谢.
我需要一次删除大量记录,我需要根据另一个与"belongs_to"关系相关的模型中的条件来执行此操作.我知道我可以遍历每个检查条件,但这需要我的大记录集永远,因为对于每个"belongs_to"它会进行单独的查询.
这是一个例子.我有一个"产品"模型"belongs_to"一个"艺术家",并且假设艺术家有一个属性"is_disabled".
如果我想删除属于残疾艺术家的所有产品,我希望能够做到这样的事情:
Product.delete_all(:joins => :artist, :conditions => ["artists.is_disabled = ?", true])
Run Code Online (Sandbox Code Playgroud)
这可能吗?我以前在SQL中直接完成了这个,但不确定是否可以通过rails完成.
以下代码将用于从两个表中选择数据:
SELECT t1.foo, t2.bar FROM TABLE1 t1 INNER JOIN TABLE2 t2 ON t1.foo=t2.foo
Run Code Online (Sandbox Code Playgroud)
我可以这么容易写
SELECT t2.foo, t2.bar FROM TABLE1 t1 INNER JOIN TABLE2 t2 ON t1.foo=t2.foo
Run Code Online (Sandbox Code Playgroud)
t1.foo或者t2.foo:一个或六个中的六个.为什么不foo呢?
我一直在想,为什么SQL服务器只是在没有指定一个表或另一个表的情况下自动返回数据,因为选择完全是任意的(据我所知).
我可以编写一个你需要指定表格的场景,例如
SELECT t1.foo, t2.bar FROM TABLE1 t1 INNER JOIN TABLE t2 ON t1.foo+=t2.foo
Run Code Online (Sandbox Code Playgroud)
但是,根据我的经验,这种情况远非常态.
任何人都可以告诉我为什么语言的设计,以便我必须在我的代码中做出这个看似随意的决定?
我们有一个Oracle 10g,我们的大多数应用程序都运行Oracle Forms 6i.我发现在views/packages/procedures/functions中编写的所有查询都是WHERE子句级别的JOINING表.例
SELECT * FROM
TABLE_A A,
TABLE_B B,
TABLE_C C,
TABLE_D D
WHERE
A.ID=B.ID(+)
AND B.NO=C.NO(+)
AND C.STATUS=D.ID
AND C.STATUS NOT LIKE 'PENDING%'
Run Code Online (Sandbox Code Playgroud)
此查询仅适用于ORACLE,因为它具有(+)在其他SQL平台中不可接受的连接限定符.以上查询相当于:
SELECT * FROM
TABLE_A A LEFT JOIN TABLE_B B ON A.ID=B.ID
LEFT JOIN TABLE_C C ON B.NO=C.NO
JOIN TABLE_D D ON C.STATUS=D.ID
WHERE
C.STATUS NOT LIKE 'PENDING%'
Run Code Online (Sandbox Code Playgroud)
我看到的非查询是在FROM子句中使用join进行编写的.
我的问题可以分为三个部分:
问:假设我有相同的Oracle环境,哪个查询在性能,缓存,CPU负载等方面更好.第一个(在WHERE加入)或第二个(在FROM加入)
问:是否有任何其他SQL实现接受(+)除oracle之外的连接限定符?如果是的话,哪个?
问:也许在WHERE子句中编写连接会使查询更具可读性,但会影响LEFT/RIGHT连接的能力,这就是为什么(+).我在哪里可以阅读更多关于它的起源(+)以及为什么它是专门为Oracle发明的?
有没有办法使用VLOOKUP内连接两个不同的Excel电子表格?
在SQL中,我会这样做:
SELECT id, name
FROM Sheet1
INNER JOIN Sheet2
ON Sheet1.id = Sheet2.id;
Run Code Online (Sandbox Code Playgroud)
工作表Sheet1:
+----+------+
| ID | Name |
+----+------+
| 1 | A |
| 2 | B |
| 3 | C |
| 4 | D |
+----+------+
Run Code Online (Sandbox Code Playgroud)
Sheet2中:
+----+-----+
| ID | Age |
+----+-----+
| 1 | 20 |
| 2 | 21 |
| 4 | 22 |
+----+-----+
Run Code Online (Sandbox Code Playgroud)
结果将是:
+----+------+
| ID | Name |
+----+------+
| 1 | A | …Run Code Online (Sandbox Code Playgroud) 有没有办法在使用dplyr进行连接时忽略大小写敏感?左,内,全?
我认为它适用于选择,但这对我来说通常是一个巨大的痛苦.我知道我可以手动转换列toupper或tolower,但这将是一个有用的工作.
我有遗留代码,我试图映射到新代码.
OLD_PERSON
pid
sid
name
age
NEW_PERSON
pid
sid
fid
age
RESOLVE_PERSON
pid
fid
status
Run Code Online (Sandbox Code Playgroud)
Java类
domain.Person {
ID _id;
String _name;
Integer _age;
}
Run Code Online (Sandbox Code Playgroud)
在传统世界中,只有一个表:OLD_TABLE.hibernate映射很简单,只有一个类及其列.在新的世界中,我必须使用上面的3个表并生成一个实体,其中名称来自OLD_PERSON,年龄来自NEW_PERSON.所以基本上SQL查询是:
select op.name as name, np.age as age
from OLD_PERSON op
INNER JOIN RESOLVE_PERSON rp
on rp.pid = op.pid
INNER JOIN NEW_PERSON np
on np.pid = rp.pid and np.fid = rp.fid and np.sid = op.sid
where rp.status = 'CURRENT'
Run Code Online (Sandbox Code Playgroud)
经过研究/谷歌搜索,我发现我可以使用"辅助表",它相当于hibernate xml中的"JOIN表".注意:我不能使用注释,因为这段代码很旧,我仍然在使用hibernate3.5.6.
所以我在映射文件中添加了一个连接表:
<class name="domain.Person" table="OLD_PERSON">
<composite-id name="_id" class="Id">
<key-property access="property" …Run Code Online (Sandbox Code Playgroud) 我想在html中显示出版物的城市,州和国家的名称.但他们在不同的表格中.
这是我的models.py
class country(models.Model):
country_name = models.CharField(max_length=200, null=True)
country_subdomain = models.CharField(max_length=3, null=True)
def __str__(self):
return self.country_name
class countrystate(models.Model):
state_name = models.CharField(max_length=200, null=True)
country = models.ForeignKey(country, on_delete=models.CASCADE, null=True)
importance = models.IntegerField(null=True)
def __str__(self):
return self.state_name
class city(models.Model):
city_name = models.CharField(max_length=200, null=True)
countrystate = models.ForeignKey(countrystate, on_delete=models.CASCADE, null=True)
def __str__(self):
return self.city_name
class publication(models.Model):
user = ForeignKey(users, on_delete=models.CASCADE, null=False)
title= models.CharField(max_length=300, null=True)
country=models.ForeignKey(country, on_delete=models.CASCADE, null=True)
countrystate=models.ForeignKey(countrystate, on_delete=models.CASCADE, null=True)
city=models.ForeignKey(city, on_delete=models.CASCADE, null=True)
def __str__(self):
return self.title
Run Code Online (Sandbox Code Playgroud)
这是我的views.py
def publications(request):
mypublications = publication.objects.filter(user_id=request.session['account_id'])
dic.update({"plist": …Run Code Online (Sandbox Code Playgroud) 我有一个名为Transactions的事务表,它通过items_transactions表与项目建立多对多关系.
我想做这样的事情:
SELECT "transactions".*
FROM "transactions"
INNER JOIN "items_transactions"
ON "items_transactions".transaction_id = "transactions".id
INNER JOIN "items"
ON "items".id = "items_transactions".item_id
WHERE (items.id IN (<list of items>))
Run Code Online (Sandbox Code Playgroud)
但是这给了我所有与列表中的一个或多个项目相关联的交易,我只希望它给我与所有这些项目相关联的交易.
任何帮助,将不胜感激.
inner-join ×10
sql ×5
join ×2
outer-join ×2
.net ×1
c# ×1
django ×1
dplyr ×1
excel ×1
hibernate ×1
left-join ×1
linq ×1
linq-to-sql ×1
many-to-many ×1
mysql ×1
oracle ×1
orm ×1
python ×1
r ×1
select ×1
sql-server ×1
vlookup ×1