我有两个相同字段的相似表格。一个名为“input”,另一个名为“product”,两者都有相同的字段:
我的第一个问题是:如何编写查询以有效地返回每个项目的详细信息?
我使用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)
答案 0 :(得分: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
注意我添加了一个源表,因此您可以回溯它从哪里获得....欢呼
答案 1 :(得分:0)
在mysql中使用full outer这是不可能的,所以使用/ take union的帮助来获取所有行
SELECT * FROM input
LEFT JOIN product ON input.id = product.id
UNION
SELECT * FROM input
RIGHT JOIN product ON input.id = product.id
答案 2 :(得分:0)
该场景的问题是“有效”这个词。图片输入 - leftjoin
比内部联接慢,left join input
和left 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
由于使用了两个内部联接,联合更快。