在mysql中从多个表中选择列

在mysql中从多个表中选择列,mysql,Mysql,我有很多这样的表,其中每个表中都有uid列,变量中有一个值,比如var1=25。我想检查var1值是否与任何表的任何uid值匹配。如果匹配,我想打印表名。有人能帮我吗 我试着这样做,我发现 TABLE 1 +----+-------+-------+-------+ | uid | color | brand | model | +----+-------+-------+-------+ | 10 | 1 | 2 | 1 | +----+-------+-------

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

我试着这样做,我发现

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

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

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

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

A.制作一个元表并使用触发器(附在基表上)来维护元表

   SELECT `COLUMN_NAME` 
   FROM `INFORMATION_SCHEMA`.`COLUMNS` 
   WHERE `TABLE_SCHEMA`='yourdatabasename' 
   AND `TABLE_NAME`='yourtablename';
B.仅使用一个表和非结构化字段,并在应用程序中解析
数据
字段

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解决方案。经常更改模式(创建表)不是一个好的设计。

如果sam更详细地说明您的情况,可以考虑其他各种解决方案。我不明白您的意思。我想要什么我已经清楚地写在问题中了。请帮助我理解如何实现它?答案编辑添加更多的解释和评论。
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}');