假设我有一组项目:
可以用两种方式构造查询.首先:
SELECT *
FROM TABLE
WHERE ITEM NOT IN ('item1', 'item2', 'item3', 'item4','item5')
Run Code Online (Sandbox Code Playgroud)
或者,它可以写成:
SELECT *
FROM TABLE
WHERE ITEM != 'item1'
AND ITEM != 'item2'
AND ITEM != 'item3'
AND ITEM != 'item4'
AND ITEM != 'item5'
Run Code Online (Sandbox Code Playgroud)
我的问题与PostgreSQL有关.
我创建了2个表
CREATE TABLE table1(customerName VARCHAR(20),custid NUMBER ,order_id NUMBER ,price NUMBER );
CREATE TABLE table2(id NUMBER ,salary NUMBER );
Run Code Online (Sandbox Code Playgroud)
现在,我尝试使用查询
SELECT t1.customername,t1.custid,t2.salary FROM table1 t1 left join table2 t2 ON t1.custid = t2.id;
SELECT t1.customername,t1.custid,t2.salary FROM table1 t1 left outer join table2 t2 ON t1.custid = t2.id;
Run Code Online (Sandbox Code Playgroud)
但我得到了相同的输出.他们在工作中内部有什么区别吗?或者都是一样的!?
大约两周前我最近问了一个类似的问题,但是我没有看到我的问题以我需要的方式运行.
我有一个从2个表中选择的查询; 门票和回复.我正在从故障单表中选择信息,并且我从回复表中选择了存储有票证ID的信息.这就是我的问题.
我的查询只显示回复超过0的票证,但我需要它才能显示票证信息,即使它没有任何回复.
我想知道(如果可能的话)是否有任何方法可以解决我的问题,如果有办法让它比我现在拥有它更简单.
现在它有点乱,但这是我的代码,用于查询和显示故障单和回复.
if(isset($_GET['id']) && is_numeric($_GET['id'])) {
$id = trim($_GET['id']);
$i = "";
$ticket = $db->conn->query("
SELECT * FROM tickets
INNER JOIN replies ON tickets.id = '$id'") or die(mysqli_error($db->conn));
while($rows = $ticket->fetch_assoc()) {
$i++;
if($_SESSION['ticket_username'] == $rows['client']) {
if($i <= 1) {
$status = $rows['status'];
echo '
<h3>'.$rows['subject'].'</h3><hr>
<div class="panel panel-danger">
<div class="panel-heading">
<h3 class="panel-title"><small>Created by '.$rows['client'].', '.$timeAgo->inWords($rows['created_at']).'</small></h3>
</div>
<div class="panel-body">'.nl2br($rows['message']).'</div>
</div>
';
}
echo '
<div class="panel panel-info">
<div class="panel-heading">
<h3 class="panel-title"><small>Reply from '.$rows['reply_username'].', '.$timeAgo->inWords($rows['reply_time']).'</small></h3>
</div> …Run Code Online (Sandbox Code Playgroud) 可能的重复:
SQL Server 中的左联接和左外联接
今天我的问题是关于oracle中的连接操作,我有两个表Table1,Tabel2
现在我想对它们执行连接操作,当我执行左外连接时,我得到正确的结果,当我执行左连接时,我得到结果是正确的
在这两个操作中我得到了相同的结果,
现在我的问题是左外连接和左连接有什么区别。
为什么 Oracle 提供了 Left Outer Join,Left Join 的工作原理是一样的。
我遇到了一个问题,我需要运行一个Query,它应该从主表中获取一些行,并且如果主表的键存在于子表(关系一对多)中,则有一个指示符.
查询可能是这样的:
select a.index, (select count(1) from second_table b where a.index = b.index)
from first_table a;
Run Code Online (Sandbox Code Playgroud)
这样我就可以得到我想要的结果(0 =在second_table中没有依赖记录,否则有),但我正在为从数据库中获取的每条记录运行一个子查询.我需要为至少三个类似的表得到这样一个指标,主要查询已经是至少两个表之间的一些内部联接......
我的问题是,是否有一些非常有效的方法来处理这个问题.我曾想过将记录保存在新列"first_table"中,但dbadmin不允许触发器并通过代码跟踪它是太冒险了.
解决这个问题的好方法是什么?
此查询的应用程序将用于两件事:
我刚发现的另一个选择:
select a.index, b.index
from first_table a
left join (select distinct(index) as index from second_table) b on a.index = b.index
Run Code Online (Sandbox Code Playgroud)
这样,如果b.index不存在,我将得到null(显示最终可以调整,我在这里关注查询性能).
这个问题的最终目标是为这种情况找到合适的设计方法.它经常发生,真正的应用程序是一个POS系统,以显示所有客户端,并在列表中有一个图标作为指示客户端已打开订单.
LEFT JOIN并且LEFT OUTER JOIN工作方式完全相同。这意味着该关键字OUTER没有任何作用或者它是可选的。
为什么我们要包含一个对执行没有影响的关键字?
I have two dataframes df1
+---+---+----------+
| n|val| distances|
+---+---+----------+
| 1| 1|0.27308652|
| 2| 1|0.24969208|
| 3| 1|0.21314497|
+---+---+----------+
Run Code Online (Sandbox Code Playgroud)
and df2
+---+---+----------+
| x1| x2| w|
+---+---+----------+
| 1| 2|0.03103427|
| 1| 4|0.19012526|
| 1| 10|0.26805446|
| 1| 8|0.26825935|
+---+---+----------+
Run Code Online (Sandbox Code Playgroud)
I want to add a new column to df1 called gamma, which will contain the sum of the w value from df2 when df1.n == df2.x1 OR df1.n == df2.x2
我尝试使用 udf,但显然从不同的数据帧中选择是行不通的,因为值应该在计算之前确定
gamma_udf = udf(lambda n: float(df2.filter("x1 = …Run Code Online (Sandbox Code Playgroud) 我一直在尝试在python中实现左外连接。我看到左连接和左外连接之间存在细微差别。
如此链接所示:SQL Server 中的 LEFT JOIN 与 LEFT OUTER JOIN
我可以通过以下示例来了解以下内容:
import pandas as pd
import numpy as np
df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'],
'value1': np.random.randn(4)})
df2 = pd.DataFrame({'key': ['B', 'D', 'D', 'E'],
'value2': np.random.randn(4)})
df3 = df1.merge(df2, on=['key'], how='left')
Run Code Online (Sandbox Code Playgroud)
这总共给出了来自 df1 的记录(包括相交的记录)
但是我如何做只有来自 df1 而不在 df2 中的记录的左外连接?
不是:这只是示例。我可能在任一数据框中都有大量列(不同)。
请帮忙。
我们的目标是使用 Entity Framework Core 和 .Include(...)扩展方法返回具有子级的对象集合,其中一些子级将为空。
我们有一个表的项目与C#模型项目和表位置用C#模型位置。
每个项目都有一个或零个Location对象,对象如下所示:
public class Project
{
public string LocationId { get; set; }
public Location Location { get; set; }
}
public class Location
{
public string LocationId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
数据库设置如下所示:
modelBuilder.Entity<Location>(entity =>
{
entity.HasKey(location => location.LocationId);
entity.ToTable("Locations");
});
modelBuilder.Entity<Project>(entity =>
{
entity.HasOne(project => project.Location).WithMany()
.HasForeignKey(x => x.LocationId);
entity.ToTable("Projects");
});
Run Code Online (Sandbox Code Playgroud)
我们创建的查询是:
var projects = dbContext.Projects.Include(x => x.Location);
Run Code Online (Sandbox Code Playgroud)
当我们期望 …
我一直在尝试完全理解 sql 连接的概念,维恩图在这方面帮助了我很多。我发现它们适用于所有类型的连接,但不适用于自然连接。
自然连接的维恩图是什么样子的?
sql ×6
join ×2
oracle ×2
apache-spark ×1
c# ×1
database ×1
db2 ×1
left-join ×1
mysql ×1
natural-join ×1
oracle10g ×1
outer-join ×1
pandas ×1
php ×1
postgresql ×1
pyspark ×1
python ×1
sql-server ×1
venn-diagram ×1