0

我有两个具有相同字段的相似表。一个名为“输入”,另一个名为“产品”,两者具有相同的字段:

  • ID
  • 姓名
  • 数量
  • 单元
  • 价格
  • pic(fk - 两者都引用同一个图片表)。

我的第一个问题是:如何编写查询以有效地返回每个项目的详细信息?

我使用 JSON 导出这些数据

$json_data.='"rec'.$i.'":{"id":"'.$id.'", "name":"'.$name.'", "price":"'.$price.'", "qty":"'.$qty.'", "units":"'.$unit.'", "pic":"'.$pic.'"},';`. 

我的第二个问题是:如何有效地引用两个表中的所有字段?

注意:我不想将这两个类别放在同一个表中,例如,item附加字段category.

只是为了纠正这一点:连接条件是(input.pic=pic.id and product.pic=pic.id)

4

3 回答 3

1

如果表具有相同的字段,您可以进行联合查询。

 SELECT * FROM table1
 UNION 
 SELECT * FROM table2

如果它们像您说的那样相似,那么您只需将它们共同的字段选择到两者中

 SELECT "table1" as source_table,id,name,qty,unit,price from table1
 UNION
 select "table2" as source_table,id,name,qty,unit,price from table2

注意我添加了一个源表,这样你就可以回溯你从哪里得到它......干杯

于 2013-05-24T19:25:18.003 回答
0

这种情况的问题在于“高效”这个词。pic - 输入 -leftjoin比内部连接慢,并且 和 的总和left join inputleft join output简单的inner join.

select pic.id as pic_id, pic.data, input.id as input_id, output.id as output_id, input....
from pic 
left join input on input.pic_id = pic.id
left join output on output.pic_id = pic.id

或者

select pic.id as pic_id, pic.data, "input" as type, input.id as id, input....
from pic 
inner join input on input.pic_id = pic.id
union
select pic.id as pic_id, pic.data, "output" as type, output.id as id, output....
from pic 
inner join output on output.pic_id = pic.id

由于使用了两个内部连接,联合更快。

于 2013-05-24T19:54:46.983 回答
0

在 mysql 中使用完整的外部这是不可能的,所以使用/利用联合的帮助来获取所有行

SELECT * FROM input
LEFT JOIN product ON input.id = product.id
UNION
SELECT * FROM input
    RIGHT JOIN product ON input.id = product.id
于 2013-05-24T19:28:48.510 回答