我有两张桌子。一个是项目,一个是ebay列表。 给定项目可以有多个ebay列表。
我有一个视图,聚合(左连接)来自几个表(包括ebay表)的一堆定价信息。
e.custom_label
将以i.id
开头,但不保证完全匹配。
SELECT i.id, i.price AS master_price, e.price AS ebay_price
FROM items i
LEFT JOIN ebay e ON ((e.custom_label LIKE CONVERT(concat(i.id,'%') using latin1)))
这大大简化了,但应该描述问题。
正如预期的那样,由于有多个与ON语句匹配的易趣物品清单,您将获得类似
的内容item master_price ebay_price
1234 29.95 29.95
1235 36.95 29.95
1235 36.95 29.95
通常我们会使用子查询代替连接中的ebay
tabel来过滤掉重复项,但由于这是一个视图,我们不能。这使我们无法在联接表上进行分组操作。有没有其他方法来过滤掉重复项,以保持基表可以从视图中编辑?
对于这种观点,获取价格(并知道产品在ebay上列出)比确保所有ebay价格相同更重要,所以我只需要一行。 UI依赖于每个项目只有一行。
答案 0 :(得分:0)
我认为您可以在SELECT列表中使用相关子查询,因为您只拉了一列。 (我会在关于这个问题的评论中重复这个警告...... 危险,威尔罗宾逊,危险!)
我没有把我的大脑缠绕在连接谓词上,应该做什么......
//main
import React from 'react';
import { Link } from 'react-router';
const Main = React.createClass({
render() {
return (
<div>
<h1>
<Link to="/">Reduxstagram</Link>
</h1>
{React.cloneElement(this.props.children, this.props)}
</div>
)
}
});
export default Main;
i.id = ((e.custom_label LIKE CONVERT(concat(i.id,'%') using latin1)))
将返回一个布尔值。值TRUE,FALSE或NULL。在数值上下文中进行求值,布尔值将为1,0或NULL。然后获取该结果,并对e.custom_label LIKE foo
列进行相等比较...我没有得到它,对于除1或0之外的任何id值,整个表达式将如何计算为TRUE。
但话说回来,id
第一部分匹配的整个业务对我来说似乎很奇怪。
ebay中的哪些行应该匹配哪个item.id值,给出如下内容:
custom_label
但除了整个业务......
我不确定为什么SELECT列表中的相关子查询不适合你。举个例子。 (在相关子查询的WHERE子句中使用所需的“匹配条件”。)
item.id
-------
12
123
ebay.custom_label
-----------------
122
123
1234
12345
存储的视图定义可能存在一些限制。 (对存储的视图定义没有多少经验。由于可以引入的各种问题,我们只是避免创建存储的视图定义。这些问题可能比存储的视图定义解决的问题大得多。)