2017-04-08 103 views
-1
TABLE 1 
+----+-------+-------+-------+ 
| uid | color | brand | model | 
+----+-------+-------+-------+ 
| 10 |  1 |  2 |  1 | 
+----+-------+-------+-------+ 

TABLE 2 
+----+-------+-------+-------+ 
| uid | quantity |model |color| 
+----+-------+-------+-------+ 
| 25 |  2 |  2 |  1 | 
+----+-------+-------+-------+ 

我有许多表这样其中UID列存在于每个table.I在一个变量中有一个值,说VAR1 = 25。我想检查var1的值是否与任何表的uid值匹配。如果匹配,我想打印表名。谁能帮我这个?在MySQL选择从多个表列

我试着这样做,我发现

SELECT `COLUMN_NAME` 
    FROM `INFORMATION_SCHEMA`.`COLUMNS` 
    WHERE `TABLE_SCHEMA`='yourdatabasename' 
    AND `TABLE_NAME`='yourtablename'; 

但是,这是不是给我想要的东西,因为我想在一个数据库中选择所有表不论将来添加任何表的表名。如果中那么它也应该被选中。

回答

0

首先,information_schema表没有特定的元组数据。 我建议你考虑不同的设计。

A.制作元表并使用触发器(附加到基表)来维护元表。

CREATE TABLE meta_table (
    id INT AUTO_INCREMENT, 
    uid INT, 
    table_name VARCHAR(50) 
); 

# When you need to add new table (table 3) 
CREATE TABLE table_3 (
    uid INT, 
    field1 INT, 
    field2 INT, 
    field3 
); 

DELIMITER $$ 
CREATE TRIGGER table_3_insert 
AFTER INSERT ON table_3 
FOR EACH ROW 
BEGIN 
    INSERT INTO meta_table (uid, table_name) 
    VALUE (NEW.uid, "table_3"); 

END$$ 
DELIMITER ; 

# If data in `table_3` might be changed or deleted, 
# then create trigger for `delete` and `update` 

B.仅使用一个表与非结构化领域,在应用程序中

CREATE TABLE table (
    uid INT, 
    table_type INT, 
    data VARCHAR(255) 
); 
INSERT INTO table (10, 1, '{"color":1,"brand":2,"model":1}'); 
INSERT INTO table (10, 2, '{"quantity":2,"model":2,"color":1}'); 

至于你提到解析data场“任何表可添加”的时候,我强烈推荐B溶液。经常更改模式(创建表格)并不是很好的设计。

+0

如果山姆更详细地说明您的情况,可以考虑其他各种解决方案。 – ham22ham

+0

我不明白你的意思。我想要什么,我写明确的问题。请帮我理解如何实现它? – sam

+0

编辑并添加更多解释和评论。 – ham22ham