关系查询问题:/

时间:2011-09-03 19:29:04

标签: mysql

我似乎无法查询包含外键的'events'表。

这就是我建立的:

$query = 'SELECT events.*, venues.*, music_styles.* FROM events, venues, music_styles'.
    'INNER JOIN venues, music_styles v ON (events.VENUE_LOCATION = venues.ID) AND (events.MUSIC_STYLE_ID = music_styles.ID';
$result = mysql_query($query);

我试图说events.VENUE_LOCATION等于表'场所'的ID,而events.MUSIC_STYLE_ID等于表'music_styles'的ID。

这是我得到的错误:

  

无效查询:不唯一的表/别名:'场地'

这是我的数据库设计: enter image description here

非常感谢大家:)

2 个答案:

答案 0 :(得分:2)

您正在从表格场所和music_styles中选择两次,这会导致您的错误。您必须为每个别名提供一个唯一的别名(例如:... FROM venues AS v)。

但是,您的查询似乎很奇怪。你正在做一些连接和笛卡尔产品,你有无与伦比的括号,你准备做什么?您在寻找这样的查询:

SELECT *
  FROM events e    -- e is the alias
INNER JOIN venues v
    ON e.VENUE_LOCATION = v.ID
INNER JOIN music_styles m
    ON e.MUSIC_STYLE_ID = m.ID;

答案 1 :(得分:2)

让我们削减PHP的东西,这是不相关的。你说,

SELECT events.*, venues.*, music_styles.* FROM events, venues, music_styles
       INNER JOIN venues, music_styles v ON (events.VENUE_LOCATION = venues.ID) AND (events.MUSIC_STYLE_ID = music_styles.ID

这不太对,这不是JOIN的工作方式。它应该是,

SELECT events.*, venues.*, music_styles.*
       FROM events
       INNER JOIN venues ON(events.VENUE_LOCATION = venues.ID)
       INNER JOIN music_styles ON(events.MUSIC_STYLE_ID = music_styles.ID)