为什么这个2表SQL查询只能用“UNION”工作(部分)?

时间:2012-03-04 19:52:44

标签: php mysql

我有两个表,我想在同一个查询中提取数据。这是(部分)有效的查询:

    $query = "SELECT city,radio,radio_site,rfacebook,rtwitter
    FROM brasil_radio
    UNION SELECT city,newspaper,newspaper_site,facebook,twitter
    FROM brasil_newspapers 
    WHERE state='Alagoas' 
    ORDER BY city 
    LIMIT $offset, $rowsPerPage";

此查询不会产生空白页面并显示数据,但它并未将其全部放在适当的位置。 (即它列出了同一列中的广播和报纸网站,即使在PHP中我为每个列设置了单独的列)。

然而,这个看似更加简化的查询会产生一个空白页面:

    $query = "SELECT * FROM brasil_newspapers, brasil_radio 
    WHERE state='Alagoas' 
    ORDER BY city 
    LIMIT $offset, $rowsPerPage";

关于上面引用的两个表的说明......它们每个都有七个字段,每个字段都有一个自动编号的主键。其中一个表的数据比另一个表少,因为我想确保它有效,但我在每个状态“Alagoas”中都有所有记录,而且上面的第一个例子部分有效。我真的想弄清楚这一点,并乐意提供你需要的任何其他信息。顺便说一下,我不是试图通过使用“SELECT *”在第二个查询中保持懒惰...我已经尝试只选择我想要的列但它仍然无效。

提前谢谢你,上帝保佑。

1 个答案:

答案 0 :(得分:0)

联合按查询列在各个选择语句中的顺序组合查询列。由于报纸和广播都在同一个地方,工会将它们组合成一列。不确定它是否有助于您的情况,但您至少可以通过执行以下操作来分离它们:

 SELECT NULL as newspaper, radio FROM brasil_radio
UNION
 SELECT newspaper, NULL as radio FROM brasil_newspaper

然后报纸的行将有一个空的无线电列,反之亦然。

第二个查询取决于您的表格布局。你在做什么是交叉连接,这意味着每个表中的每一行都与另一个表的每一行相连。你可能不希望这样。 :)您是否在第二个查询中看到SQL错误?因为如果两个表都有一个'state'列,交叉连接的产品将有两个状态列,因此state = x是不明确的,应该抛出错误。

在不知道您希望显示此数据的具体情况的情况下,我无法告诉您哪种类型的查询对您有用。