从mysql中的多个表中选择一列

时间:2017-04-08 19:34:30

标签: mysql

TABLE 1
+----+-------+-------+-------+
| uid | color | brand | model |
+----+-------+-------+-------+
|  10 |     1 |     2 |     1 |
+----+-------+-------+-------+

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

我有很多这样的表,其中 uid 列存在于每个表中。我在变量中有一个值,比如var1 = 25。我想检查var1值是否与任何表的任何uid值匹配。如果匹配,我想打印表名。任何人都可以帮我这个吗?

我试过这样做,我找到了

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

但这并不是我想要的,因为我想选择数据库中的所有表而不管表名。如果将来添加任何表,那么它也应该被选中。

1 个答案:

答案 0 :(得分:0)

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

一个。创建一个元表并使用触发器(附加到基表)来维护元表。

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中。仅使用一个包含非结构化字段的表并在应用程序中解析data字段

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}');

正如您提到的“经常添加任何表格”,我强烈推荐B解决方案。经常更改模式(创建表)并不是一个好的设计。