使用表B中的值访问表A的列值

时间:2014-01-27 15:17:49

标签: mysql sql

我有两张桌子说ABC和XYZ,

表ABC:

B   C   ID    ABC_ID
====================
50  30  10     2
60  31  11     3

注意:所有值字段都是整数。

表XYZ:

group   condition    value   ID
================================
  B         =         50     10
  C         >         30     11

注意:

  1. B列和条件是varchar字符串和值,ID列是整数。
  2. 使用MySQL 5.5

  3. 我正在根据列ID加入这两个表。 表XYZ中的组有许多值,这些值是表ABC中的列。

    所以,我的问题是:

    1. 一旦ID匹配,我将从表XYZ获得上述情况中group的值为B.然后使用该值,我应该如何从表ABC中获取B的值?

      我想做类似的事情:

      select A.(X.group) from ABC A join XYZ X on A.ID = X.ID;

    2. 一旦我能够使用步骤1(如上所述)获得列B的值,我需要形成类似于(组条件值)的表达式,例如:在有效情况下B = 50并从表达式中的表ABC中替换B的值。需要评估形成的表达式,如果为true,则需要从表ABC返回ABC_id。我该如何评估表达式?

      我正在做这样的事情:

      select A.ABC_ID from XYZ X join ABC A on A.ID = X.ID where X.(A.group) A.condition A.value;

    3. 我尝试过使用PREPARE'ing和EXECUTE'ing但ABC和XYZ的连接会给出多行作为一组。它不起作用。

      SELECT X.group, X.condition, X.value 
      from XYZ X join ABC A
      on X.ID = A.ID
      into @colname, @condition, @value;
      
      SET @qry = CONCAT('SELECT * from ABC WHERE ',@colname,@condition,@value);
      
      PREPARE stmt FROM @qry;
      EXECUTE stmt;
      

      感谢。

1 个答案:

答案 0 :(得分:0)

我在这里创建了一个这样的平台:http://sqlfiddle.com/#!2/15e205/5

请注意,我更改了groupcondition的名称,因为它们是reserved words,并且对列名称来说确实不是很好的选择。

我正在使用CONCAT()根据在XYZ中检索到的值构建查询。

SELECT grp, cndition, value 
from XYZ 
where id = 10 
into @colname, @condition, @value;

SET @qry = CONCAT('SELECT * from abc WHERE ',@colname,@condition,@value);

PREPARE stmt FROM @qry;
EXECUTE stmt;