2012-12-13 20 views
0

你们请帮我改写这个使用子查询重写加入作为此查询的子查询

SELECT 
    S.DENUMIRE, M.DENUMIRE, AN 
FROM 
    SPECIALIZARE S 
JOIN 
    MATERII M ON S.CODSPEC = M.CODSPEC 
ORDER BY 
    S.DENUMIRE 
+0

你在做什么需要联合操作的本质。我认为你应该更新你的问题,解释你到底有什么问题。然后我们可以帮助解决问题。 – dan1111

+0

请注意,“子查询”仅从其中一个表创建中间结果集。但是你仍然需要加入子查询的结果来将它与另一个表连接起来。 – dan1111

回答

1
SELECT 
    S.DENUMIRE, 
    M.DENUMIRE, 
    AN 
FROM SPECIALIZARE S 
JOIN (
    SELECT 
     DENUMIRE, 
     CODSPEC 
    FROM MATERII 
) AS M 
    ON S.CODSPEC = M.CODSPEC 
ORDER BY S.DENUMIRE 
+0

谢谢,但我没有加入nead –

+0

你可以给我一个更多的回应,而不使用连接 –

+3

你想要在SELECT列表中的两列的数据。如果不加入这两个表格,这是不可能的。 –

0

假设DENUMIRE是一个整数:

SELECT S.DENUMIRE, 1 DENUMIRE, AN 
    FROM SPECIALIZARE S 
WHERE EXISTS (
       SELECT * 
       FROM MATERII M 
       WHERE S.CODSPEC = M.CODSPEC 
         AND M.DENUMIRE = 1 
      ) 
UNION 
SELECT S.DENUMIRE, 2 DENUMIRE, AN 
    FROM SPECIALIZARE S 
WHERE EXISTS (
       SELECT * 
       FROM MATERII M 
       WHERE S.CODSPEC = M.CODSPEC 
         AND M.DENUMIRE = 2 
      ) 
UNION 
SELECT S.DENUMIRE, 3 DENUMIRE, AN 
    FROM SPECIALIZARE S 
WHERE EXISTS (
       SELECT * 
       FROM MATERII M 
       WHERE S.CODSPEC = M.CODSPEC 
         AND M.DENUMIRE = 3 
      ) 

UNION 
... 

等每一个整数价值......这当然是不可行的。

您需要加入!如果你只是想避免避免教学的原因JOIN关键字:

SELECT 
    S.DENUMIRE, M.DENUMIRE, AN 
FROM 
    SPECIALIZARE S, MATERII M 
WHERE 
    S.CODSPEC = M.CODSPEC 
ORDER BY 
    S.DENUMIRE 

附:尽管SQL的“兼容性枷锁”(20世纪80年代的供应商支持这一点,并成为标准等)允许同一个表中的两列具有相同的名称,但在实践中这可能不是一个好主意。另外,我假设AN来自表SPECIALIZARE,但可能是错字。

+0

感谢您的答案,但它仍然dosent帮助我,我尝试了很多方式,这是种的一个分配,使不使用连接,只有子查询我知道它的困难,因为我没有张贴表格。我在这个链接上找到了一些参考,但是它的反例和是的,你可以做到这一点,而不使用连接,但我只是不知道它http://dev.mysql.com/doc/refman/5.0/en/rewriting-subqueries。 html 2 tabels Materii with Codmaterie and An and Specializare with Denumire –

+0

为了简单起见,我只是想要从materi 2不同的表格中显示denumire而不使用join或where –

+0

@CalinSinea请解释为什么你有这个要求! – dan1111

0

你可能可以用一个工会和一个小组做一些愚蠢的事情。例如:

select max(s_denumire) as s_denumire, 
     max(m_denumire) as m_denumire, 
     codspec 
    from (
     select denumire as s_denumire, null as m_denumire, codspec 
      from specializare 
     union all 
     select null as s_denumire, denumire as m_denumire, codspec 
      from materii 
    ) 
    group by codspec 

这产生一行每codspec,所以它不完全像一个连接。但你可以用行号来解决这个问题。我会把它作为你的锻炼,因为这显然是家庭作业。

0

你只是想要两个表中的不同行吗?

SELECT 
    SQ.DENUMIRE, SQ.AN 
FROM (
    SELECT 
     DENUMIRE, AN 
    FROM 
     SPECIALIZARE 

    UNION 

    SELECT 
     DENUMIRE, AN 
    FROM 
     MATERII 
) SQ 
ORDER BY 
    SQ.DENUMIRE 
+0

...这不会给他相同的结果集布局,所以我怀疑这是他想要的。 –