在MySQL中加入两个表

时间:2011-08-19 18:57:52

标签: mysql

这是我的两张桌子。我不确定它们是否正确归一化:

all_configurator_lasers_power:

laser_id | power_id | laser_configuration
=========================================
    1       10         1
    1       25         1
    1       20         2
    1       50         2
    2       10         1 ...

all_configurator_power_text:

power_id | power_level | laser_configuration | power_text
========================================================= 
   10        10 watts        1                  10 watt text
   25        25 watts        1                  25 watt text
   20        20 watts        2                  20 watt text
   50        50 watts        2                  50 watt text

如果我在第一个表中提供laser_id,我想要的是第二个表的前两行。

这是我尝试过的(但没有用)

'SELECT * FROM all_configurator_power_text 
 INNER JOIN all_configurator_power_text 
 ON all_configurator_lasers_power.laser_configuration = all_configurator_power_text.laser_configuration'

这将返回如下数组:

Array (
[0] => stdClass Object
        (
            [id] => 1
            [language] => en
            [power_id] => 10
            [power_level] => 10 watts
            [laser_configuration] => 1
            [power_text] => 10 watt text
            [laser_id] => 1
        )
...)

但是数组(CodeIgniter对象)也返回了laser_configuration为2的对象。我只想要那些带有1的对象。我添加了一个WHERE laser_configuration = 1的WHERE子句,但后来我得到了一个非对象错误。

我做错了什么?

4 个答案:

答案 0 :(得分:0)

您需要在laser_configuration子句中指定要使用的表WHERE。这样做,它应该与你写的条款一起使用。

所以你最终得到的结果是:

 SELECT * FROM all_configurator_power_text
 INNER JOIN all_configurator_lasers_power 
 ON all_configurator_lasers_power.laser_configuration = all_configurator_power_text.laser_configuration
 WHERE all_configurator_lasers_power.laser_configuration = 1

另外,我建议添加一些速记引用以使其更具可读性。多年来,它可以在保持自己的理智方面发挥重要作用:

 SELECT * FROM all_configurator_power_text text
 INNER JOIN all_configurator_lasers_power lasers
 ON lasers.laser_configuration = text.laser_configuration
 WHERE lasers.laser_configuration = 1

答案 1 :(得分:0)

尝试添加以下内容:

WHERE all_configurator_lasers_power.power_id = 1

答案 2 :(得分:0)

您的表格结构存在一些潜在问题,但如果不了解您的具体要求,则很难说清楚。例如,您在每个表中都有power_id和laser_configuration。

你的where子句的可能问题是你需要指定你正在使用的两个表的laser_configuration中的哪一个。即:

WHERE all_configurator_lasers_power.power_id = 1

答案 3 :(得分:0)

SELECT *
FROM all_configurator_lasers_power
INNER JOIN all_configurator_power_text
ON all_configurator_lasers_power.laser_id = all_configurator_power_text.laser_configuration
WHERE all_configurator_lasers_power.laser_id = $id (in your case 1)