SQL Server中的CROSS JOIN和FULL OUTER JOIN有什么区别?
他们是一样的,不是吗?请解释.什么时候会使用其中任何一个?
CROSS JOIN
和之间有什么区别INNER JOIN
?
交叉加入:
SELECT
Movies.CustomerID, Movies.Movie, Customers.Age,
Customers.Gender, Customers.[Education Level],
Customers.[Internet Connection], Customers.[Marital Status],
FROM
Customers
CROSS JOIN
Movies
Run Code Online (Sandbox Code Playgroud)
内部联接:
SELECT
Movies.CustomerID, Movies.Movie, Customers.Age,
Customers.Gender, Customers.[Education Level],
Customers.[Internet Connection], Customers.[Marital Status]
FROM
Customers
INNER JOIN
Movies ON Customers.CustomerID = Movies.CustomerID
Run Code Online (Sandbox Code Playgroud)
哪一个更好,为什么我会使用其中一个?
如何使用LINQ to SQL执行CROSS JOIN?
我想知道是否CROSS JOIN
可以INNER JOIN
在找到任何查询时安全地替换它.
是INNER JOIN
没有ON
或USING
完全一样的CROSS JOIN
?如果是,那么CROSS JOIN
发明的类型只是为了在查询中更好地表达意图吗?
这个问题的附录是:
哪有用在使用现代化的和广泛使用的DBMS的不同CROSS JOIN ... WHERE x
, INNER JOIN ... ON ( x )
或INNER JOIN ... WHERE ( x )
?
谢谢.
我有5个项目,每个项目可以取值1或-1.我想生成一个由可能组合的行组成的矩阵.项目的顺序无关紧要,组合的顺序无关紧要.我知道我可以机械地做到这一点,但我认为有人必须知道生成这个矩阵的捷径.如果这与其他问题类似,我很抱歉,但我发现的解决方案都不能用我的编程技巧应用于这个特定问题.
如果我有一个我想要交叉连接的表,我该如何删除重复的行?换句话说,我怎么能做一个"订单无所谓"交叉加入?
所以例如,如果我有一个表T:
field |
-------
A |
B |
C |
Run Code Online (Sandbox Code Playgroud)
我交叉加入自己,所以我没有得到A | 一排
T as t1
cross join
T as t2
on t1.field != t2.field
Run Code Online (Sandbox Code Playgroud)
我会得到以下内容:
field | field
------+-------
A | B
A | C
B | A
B | C
C | A
C | B
Run Code Online (Sandbox Code Playgroud)
但是,对我来说A,B与B,A相同.
有没有一个很好的方法来删除这些重复?换句话说,我希望组合而不是排列.
我写了这块Linq来处理CROSS Join就像数据库在多个列表之间一样.
但由于某些原因,当任何一个列表超过3000时,它会非常慢.我会等30秒?这些列表可能会非常大.
此查询循环使用来自ColumnDataIndex的其他列表数据的每个关系.
任何建议?
更新** - 数据被插入到从配置的源中预先构建的普通列表中.这一切都在记忆中.
RunningResult[parameter.Uid] = (from source_row in RunningResult[parameter.Uid]
from target_row in ColumnDataIndex[dest_key]
where GetColumnFromUID(source_row, rel.SourceColumn) == GetColumnFromUID(target_row, rel.TargetColumn)
select new Row()
{
Columns = MergeColumns(source_row.Columns, target_row.Columns)
}).ToList();
Run Code Online (Sandbox Code Playgroud)
2个额外功能:
MergeColumns:从2个项目中获取列并将它们合并为单个数组.
public static Columnn[] MergeColumns(Column[] source_columns, Column[] target_columns)
{
Provider.Data.BucketColumn[] new_column = new Provider.Data.BucketColumn[source_columns.Length + target_columns.Length];
source_columns.CopyTo(new_column, 0);
target_columns.CopyTo(new_column, source_columns.Length);
return new_column;
}
Run Code Online (Sandbox Code Playgroud)
GetColumnFromUID:返回与给定的列uid匹配的Item中的Column的值.
private static String GetColumnFromUID(Row row, String column_uid)
{
if (row != null)
{
var dest_col = row.Columns.FirstOrDefault(col => …
Run Code Online (Sandbox Code Playgroud) 我subquery must return only one column
尝试运行以下查询时收到错误:
SELECT mat.mat as mat1, sum(stx.total ) as sumtotal1,
(
SELECT mat.mat as mat, sum(stx.total) as sumtotal
FROM stx
LEFT JOIN mat ON stx.matid = mat.matid
LEFT JOIN sale ON stx.saleid = sale.id
WHERE stx.date BETWEEN '2013-05-01' AND '2013-08-31'
AND sale.userid LIKE 'A%'
GROUP BY mat.mat
) AS MyField
FROM stx
LEFT JOIN mat ON stx.matid = mat.matid
LEFT JOIN sale ON stx.saleid = sale.id
WHERE stx.date BETWEEN '2013-05-01' AND '2013-08-31'
AND sale.userid …
Run Code Online (Sandbox Code Playgroud) 我们计划将Apache Pig代码移动到新的Spark平台.
Pig具有"Bag/Tuple/Field"概念,其行为与关系数据库类似.Pig为CROSS/INNER/OUTER连接提供支持.
对于CROSS JOIN,我们可以使用别名= CROSS别名,别名[,别名...] [PARTITION BY partitioner] [PARALLEL n];
但是当我们转向Spark平台时,我在Spark API中找不到任何对应物.你有什么主意吗?
cross-join ×10
sql ×4
c# ×2
linq ×2
r ×2
sql-server ×2
.net ×1
apache-spark ×1
inner-join ×1
join ×1
left-join ×1
linq-to-sql ×1
postgresql ×1
self-join ×1
t-sql ×1