标签: outer-join

为什么我的 mysql 简单外连接需要这么长时间?

我知道这是一个常见问题,但我找不到为什么这两个简单表的外连接需要这么长时间的问题。

我确保它们都是 myisam,具有相同的字符集。

创建表 `pinventory` (
  `article` char(10) 字符集 latin1 NOT NULL,
  `库存` int(11) 默认为 NULL,
  `store_id` char(10) 字符集 latin1 默认为 NULL,
  `status` char(1) 字符集 latin1 默认为 NULL,
  `what` int(11) 默认为 NULL,
  主键(`文章`),
  关键“文章”(“文章”)
) 引擎=MyISAM 默认字符集=utf8

-- pinventory 有 59310 行

创建表“产品”(
  `productid` int(11) NOT NULL 默认 '0',
  `prodcode` varchar(250) NOT NULL DEFAULT '',
  `prodname` varchar(250) NOT NULL DEFAULT '',
  `prodtype`smallint(6) NOT NULL DEFAULT '0',
 ...
  主键(`productid`),
  关键“产品代码”(“产品代码”)
) 引擎=MyISAM 默认字符集=utf8

-- 产品有 7978 行

选择产品代码、产品名称、“不在库存中”
来自产品
LEFT OUTER …

mysql character-encoding outer-join

2
推荐指数
1
解决办法
271
查看次数

sqlalchemy 中的外连接

我是数据库新手,正在练习基本操作。我已经在我的机器上设置了 mysql、python 和 sqlalchemy(巨大的胜利)。

我已经用部门和员工编写了这个基本架构(我知道,很无聊)。我已经弄清楚如何进行内部联接(下面包含代码,请随意复制),但我似乎无法获得外部联接。

from sqlalchemy import create_engine
from sqlalchemy import Column, Integer, String, Table, Text, Date
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship, backref, sessionmaker
from datetime import datetime

engine = create_engine('sqlite:///:memory:', echo=False)
Session = sessionmaker(bind=engine)
session = Session()

Base = declarative_base()

class Department(Base):
    __tablename__ = 'department'
    id = Column(Integer, primary_key=True)
    name = Column(String(100))

    def __init__(self, id, name):
        self.id = id
        self.name = name

class Emp(Base):
    __tablename__ = 'employee'
    id = Column(Integer, primary_key=True) …
Run Code Online (Sandbox Code Playgroud)

python mysql sqlalchemy outer-join

2
推荐指数
1
解决办法
5920
查看次数

需要在SQL Server中加快此查询

SELECT pe.prodtree_element_id prodID, pe.prodtree_element_name_s, li.line_name, av2.value
    FROM prodtree_element pe
    LEFT JOIN prodtree_link pl
        ON pe.prodtree_element_id = pl.to_prodtree_node_id
    LEFT JOIN line li
        ON pe.line_code = li.line_code
    INNER JOIN attribute_values av
        ON av.attribute_definition_id = #statusCode# 
    LEFT JOIN attribute_values av2
        ON pe.prodtree_element_id = av.prodtree_element_id
    WHERE pe.prodtree_element_func_type <> 'WIZARD'
        AND pe.prodtree_element_topo_type = 'NODE'
Run Code Online (Sandbox Code Playgroud)

"#statusCode#"是一个静态id,它匹配属性定义表中的id(为了参数,我们假设为22).问题是,查询在任何合理的时间内完成都会遇到很大麻烦.更大的问题是,我有点需要它提前完成,但记录的数量是巨大的,它必须退缩(约30-50,000).我需要来自多个表的数据,这是它开始变慢的地方.这只是我需要的一部分,我还需要一个与当前"prodtree_elment_id"相匹配的整个其他表.

我正在使用ColdFusion,但即使在SQL Server 2005中直接运行查询也会为此查询创建15-30分钟的等待时间(如果它甚至完成).是否有任何可以想象的方法来加快此查询最多花费5分钟或更少?

sql t-sql sql-server performance outer-join

1
推荐指数
1
解决办法
2479
查看次数

对于这种情况,是否需要一个完整的外部联接?

我正在尝试为我正在编写的存储过程找到使用FULL OUTER JOIN的替代方法.这是场景.

两张大多数不相关的数据表,表示需要发生的事件.事件需要按时间顺序处理,两个表都有一个日期时间列.因此,我需要获取一个表,作为按日期时间排序的所有这些事件的列表(这两个日期时间列需要混合在一起).

一个小问题:有时两个表中的事件是相关的,在这种情况下,无论日期时间如何,表A中的事件都需要先行.因此,如果A有3个事件,而B有3个事件,但A和B之间只有一个相关的对,我想返回5行.如果存在不相关的数据,则会有NULL数据(这没关系,我使用NULL数据检查来确定下一步要做什么,即进程事件A或B等)

目前我看起来像这样:

    SELECT
    CASE
        WHEN A.EventDateTime IS NULL THEN B.EventDateTime
        ELSE A.EventDateTime 
    END AS SortDateTime,
    A.EventId,
    B.EventId,
    FROM A FULL OUTER JOIN B
    ON A.RelatedData=B.RelatedData
    ORDER BY SortDateTime
Run Code Online (Sandbox Code Playgroud)

sql-server outer-join

1
推荐指数
1
解决办法
564
查看次数

是什么影响NHibernate使用外连接而不是内连接?

我在NHibernate项目中有几个配置使用的一对多映射Sets.

没有做项目,并max_fetch_depth设置为2,NHibernate似乎总是使用外连接而不是内连接.

是否有一个原因?映射结构相当于:

Category
  +- Document.Category
    +- Document.User
Run Code Online (Sandbox Code Playgroud)

只是简单的一对多设置.

nhibernate join inner-join outer-join

1
推荐指数
1
解决办法
768
查看次数

左外连接与同一个表作为外连接的一部分

我想知道如何通过编写外连接查询来获得所需的输出(如下所述),其中我外连接的表是声明中其​​他连接条件的一部分

给定以下数据结构 - 表A是包含一些任意对象的主表 - 表B由A引用,其中A.TYPE_ID = B.ID - 表C定义表A中对象之间的关系,其中C.SOURCE_ID引用A.ID和C.TARGET_ID引用A.ID

这就是架构的定义方式,我无法做任何事情(它是遗留系统)

TABLE_A                 
---------------------------
| ID  | TYPE_ID | Name    |
|-------------------------|
| 1   | 1       | Name 1  |
| 2   | 2       | Name 2  |
| 3   | 1       | Name 3  |
| 4   | 1       | Name 4  |
| 5   | 3       | Name 5  |
|-------------------------|

TABLE_B
----------------------
| ID  | TYPE_NAME    |
|--------------------|
| 1   | Type 1       |
| 2   | Type …
Run Code Online (Sandbox Code Playgroud)

sql left-join outer-join

1
推荐指数
1
解决办法
8216
查看次数

如何才能真正加入示例?

我有以下查询,但没有给出预期的结果:

SELECT "invoice"."ITEMNO", 
  "invoice"."Outgoing", 
  "storeage"."incoming" 
FROM   "MVXJDTAP"."MVXJDTA"."invoice" 
INNER JOIN "MVXJDTAP"."MVXJDTA"."storeage " 
  ON "invoice"."ITEMNO" = "storeage"."itemno"
ORDER BY"storeage"."itemno"

Tables:
invoice
itemno       Outgoing
ZOMV3-94        4 
ZOMV3-94        7 

storeage
itemno      incoming
ZOMV3-94    3
ZOMV3-94    1
ZOMV3-94    60
ZOMV3-94    5 
Run Code Online (Sandbox Code Playgroud)

查询给出了结果:

itemno      outgoing      incoming
ZOMV3-94       4             3
ZOMV3-94       4             1
ZOMV3-94       4             60
ZOMV3-94       4             5
ZOMV3-94       7             3
ZOMV3-94       7             1 
ZOMV3-94       7             60
ZOMV3-94       7             5
Run Code Online (Sandbox Code Playgroud)

但我希望得到以下真实结果:

ZOMV3-94       4           NULL OR 0
ZOMV3-94       7           NULL OR 0
ZOMV3-94     NULL OR 0       3 …
Run Code Online (Sandbox Code Playgroud)

sql-server join self-join outer-join sql-server-2008

1
推荐指数
1
解决办法
91
查看次数

PostgreSQL或SQL一般:LEFT OUTER JOIN和WHERE条件意外行为(对我来说?)

假设我有两个表,可能有也可能没有关系.例如,书籍和标签.所以,假设我想选择没有"Sci-Fi"标签的书籍,我会写这样的东西:

SELECT
  *
FROM
  books
LEFT OUTER JOIN
  tags ON books.id = tags.taggable_id
WHERE
  tags.name NOT IN ('Sci-Fi')
Run Code Online (Sandbox Code Playgroud)

我没想到这也会排除没有标签的书籍.我试过这个:

WHERE
  tags.name IN (NULL, 'Novel'...)
Run Code Online (Sandbox Code Playgroud)

最后得到了这个,我很确定不是最好的方法:

WHERE
  tags.name NOT IN ('Sci-Fi') OR tags.id IS NULL
Run Code Online (Sandbox Code Playgroud)

问题是为什么,还有另一种方式吗?

PS不会问为什么标签是这样创建的,它只是为了举例而且这是我设法挤出自己的最佳类比:)

sql postgresql outer-join

1
推荐指数
1
解决办法
40
查看次数

PostgreSQL查询聚合和RIGHT JOIN不过滤

我在一对多地图,库存和批次上有两个表,在批次表上我有一个名为deleted的布尔字段,所以我没有真正删除行,但更改了要忽略的标志而不计入查询,我正在尝试将一个查询合并到一个视图中,但是如果我添加了删除的字段,那么查询的RIGHT JOIN就像INNER JOIN一样,我希望下面的示例中的所有FROM库存工作正常,但不排除任何已删除的记录在桌子上jap.lots.

    CREATE VIEW view_inventory_lots AS 
SELECT count(lots.*) AS lots,
sum(lots.qty_available) AS available,
sum(lots.qty_received) AS received,
sum(lots.qty_on_hand) AS onhand,
sum(lots.qty_allocated) AS allocated,
inventories.* 
FROM jap.lots RIGHT JOIN jap.inventories
 ON jap.lots.inventory_id = jap.inventories.inventory_id
  GROUP BY inventories.inventory_id;
Run Code Online (Sandbox Code Playgroud)

如果我尝试修改此视图以使用以下查询添加lot.deleted字段进行过滤:

SELECT count(lots.*) AS lots,
sum(lots.qty_available) AS available,
sum(lots.qty_received) AS received,
sum(lots.qty_on_hand) AS onhand,
sum(lots.qty_allocated) AS allocated,
lots.deleted,
inventories.* 
FROM jap.lots RIGHT JOIN jap.inventories
 ON jap.lots.inventory_id = jap.inventories.inventory_id
 WHERE lots.deleted = false
  GROUP BY inventories.inventory_id, lots.deleted;
Run Code Online (Sandbox Code Playgroud)

结果只是在批次表上有记录的库存行,因此忽略了RIGHT JOIN的用途,表现为INNER JOIN

有任何想法吗?提前致谢

sql postgresql outer-join

1
推荐指数
1
解决办法
47
查看次数

为什么NVL()在以下外连接(+)中不起作用?

我正在尝试外连接两个表,并且当"全名"列中显示空值时,将其替换为"无人".

外连接工作正常,问题是,null值仍为null,而不是'No one'.

以下是我的代码.

SELECT 
NVL(to_char(e.FIRST_NAME||' '||e.LAST_NAME),'No One') "Full Name",
d.DEPARTMENT_NAME
FROM EMPLOYEES e,DEPARTMENTS d
WHERE e.DEPARTMENT_ID(+)=d.DEPARTMENT_ID;
Run Code Online (Sandbox Code Playgroud)

Follwing是结果的屏幕截图. 在此输入图像描述

谢谢你看看!

sql oracle outer-join nvl

1
推荐指数
1
解决办法
944
查看次数